2014-10-23 1 views
1

XPath를 기반으로 XML 노드를 업데이트해야하는 예제가 있습니다. SimpleXMLElement은 XPath를 사용하여 노드를 잡고 참조 기준 형식으로 값을 업데이트함으로써이 작업을 충분히 쉽게 수행 할 수 있습니다.XPath에서 XML 생성

그러나 업데이트해야 할 노드가 실제로 존재하지 않으면이 작업이 전혀 수행되지 않습니다. 존재하지 않는 XPath와 일치하는 XML을 자동으로 생성하는 간단한 방법이 있습니까?

예 다음 XML을 감안할 때

<example> 
    <childNode1>green</childNode1> 
</example> 

, 나는 쉽게 SimpleXMLElement로 XML을로드 한 후 $xml->xpath("example/childNode1");을 실행하여 <childNode1>를 얻기 위해 XPath는 명령을 실행할 수 있습니다. 그런 다음 반환 된 값 SimpleXMLElement을 새로운 것으로 설정 한 다음 XML을 저장할 수 있습니다.

그러나 <childNode2>과 같이 설정해야한다면 $xml->xpath("example/childNode2")은 아무 것도 반환하지 않으며 값을 설정하거나 XML이 작성되었는지 확인할 수 없습니다.

XPath를 반복하고 값을 구문 분석하여 각 자식 노드가 있는지 확인한 다음 필요에 따라 XPath를 생성하는 좋은 방법이 있습니까?

+1

얼마전 자바 스크립트와 비슷한 대답을 보였습니다. http://stackoverflow.com/a/26296087/2265374 – ThW

답변

2

XPath는 XML 구조의 노드를 선택하고 선택적으로 XML의 내용을 기반으로 값을 계산하는 데 사용되는 쿼리 언어입니다. XML 또는 자동 노드 작성을 편집 할 수있는 기능을 가지고 있지 않습니다.

PHP의 SimpleXML과 DOM은 모두 XPath 구현을 가지며 XML 구조를 생성하거나 업데이트 할 수 있습니다. 노드 편집에 대해 이야기 한 이후에 대해 알고 있다고 가정합니다 (그렇지 않은 경우 예제를 줄 수 있습니다). 제안하는 노드 추가 기능을 수행하려면 노드가 있는지 확인해야합니다 (예 : example/node1에 대한 xpath 쿼리가 노드를 반환했지만 example/node2이 반환하지 않은 경우) 새 노드를 만들어 XML에 추가합니다 나무. 긴 xpath (예 : example/apple/blueberry/canola/date/emblem/node1, 실제로 경로를 구문 분석하고 존재하는 요소를 확인하고 그렇지 않은 요소를 추가해야합니다.

XQuery은 XPath 2와 XPath가 포함 된보다 강력하고 완벽한 기능을 갖춘 XML 쿼리 언어로 XML 변환 기능을 제공합니다. XQuery가 활발하게 개발되고 있지만 불행히도 현재 구현 (2014 년 말)에는 XML을 업데이트 할 수있는 기능이 부족합니다. 이 공간을 조심해!

+0

XQuery를 계속 살펴볼 것입니다! – sailboatlie

관련 문제