2010-12-30 5 views
2

와 노드를 교체 : 나는 zuq 네임 스페이스에 모든 최상위 노드를 모아 SimpleXML을의 XPath는 방법을 사용했습니다PHP의 SimpleXML; 이 XML/XHTML 조각을 감안할 때 텍스트 노드

<h1> 
    <zuq:data name="siteHeader" /> 
</h1> 

<h2> 
    <zuq:data name="pageHeaderName" /> 
    <span>&mdash;</span> 
    <zuq:data name="pageHeaderTitle" /> 
</h2> 

합니다. xpath() 메서드의 배열 요소는 SimpleXML 개체 트리 노드에 대한 의사 참조이므로 조작이 쉬울 것이라고 생각했습니다. 그러나 주어진 요소 노드를 텍스트 노드로 바꾸는 방법을 알 수는 없습니다. 예를 들어 <zuq:data name="siteHeader" />My Site Header 텍스트로 바꿀 수 있습니까?

첫 번째 블록 (<h1>)에서 작동하는 것처럼 부모 노드를 대상으로하고 내용을 수정하는 것으로 간주했지만 두 번째 블록 (<h2>)의 경우에는 작동하지 않습니다.

PHP에서 SimpleXML을 통해 주어진 요소 노드를 텍스트 노드로 바꾸는 쉬운 방법이 있습니까?

답변

1

내가 아는 한, simplexml에는 노드를 제거하거나 대체 할 수있는 기능이 없습니다. 그것은 독서, 창조 및 비 구조와 관련된 편집을위한 것입니다. DOM XML 객체를 사용하여 노드를 완전히 대체해야합니다. 이것은 simplexml의 좀 더 복잡한 버전과 같습니다. 여기에 대해 읽어 :

http://www.php.net/manual/en/book.domxml.php

+0

알겠습니다. 감사합니다. dqhendricks. PHP 문서에 따르면 DOM XML은 5.0.0부터 PHP 코어에서 제거되었으며 PECL로 옮겨졌습니다. 다른 DOM 클래스는보다 포괄적이어야합니다. – Dan

+0

당신 말이 맞습니다. 그 경우 참조 : http://www.php.net/manual/en/book.dom.php – dqhendricks

+0

다시 감사드립니다 ** dqhendricks **; DOM은 어휘 오버 헤드가 훨씬 더 많지만 필요한 기능을 제공하는 것 같습니다. – Dan

1

문서를 빨리보고 나는 간단한 방법을 찾지 못했습니다. 원본 xml 문서를 반복하고 각 요소를 새 xml 문서에 복사하여 필요에 따라 수정합니다.

+0

흠, 그건 확실히 성가신 증명합니다. 필자는'SimpleXML'의 사용을 둘러싸고 논리적으로 많은 논리를 작성하지 않았기 때문에 PHP XML 문서 탐색/조작을위한 다른 옵션을 탐색하는 것이 바람직할까요? – Dan

+0

xsl 변환을 살펴 보길 원할 것입니다. 정말 강력하고 xpath 항목이 바로 들어 맞습니다. http://php.net/manual/en/book.xsl.php –

+0

감사합니다 ** Abdullah Jibaly **; XSLT는 프로젝트의 다른 측면에 필요한 것 같지만 DOM이이 경우에 적합하다고 생각합니다. 단순히 필요한 더 많은 프로그래밍 기능 만 제공합니다. – Dan

관련 문제