문제
xpath로 처리하는 데 어려움이있는 XML이 있습니다. 내가 찾고있는 가치를 얻을 수없는 것 같습니다. XML은 다음과 같이 구성됩니다.
<Group>
<Menu>
<Name>Top Menu</Name>
<Document>
<DocName>Readme.txt</DocName>
</Document>
<Menu>
<Name>Sub Menu</Name>
<Document>
<DocName>Manual.pdf</DocName>
</Document>
<Document>
<DocName>UserGuide.pdf</DocName>
</Document>
</Menu>
</Menu>
</Group>
메뉴 이름이 주어지면 메뉴에서 DocumentNodes 목록을 되찾고 싶습니다. 예를 들어, "하위 메뉴"가 주어지면 Manual.pdf 및 Userguide.pdf의 두 문서 노드를 다시 얻고 싶습니다.
현재, 나는 어린이들을 통해 루프하는 코드를 사용 하여이 정보를 가져오고 있지만, XPath를 사용하여 직접 끌어 올리려고하지만 내 기술은 약합니다.
(그리고 당신이 묻기 전에, 나는 XML을 재구성 할 수 없다. 그것은 이런 식으로 나에게 제공된다.)
이견있는 사람?
해결책
다음은 원하는대로 할 수있는 XPath입니다.
//Menu[Name='Sub Menu']/Document
다른 팁
/<Menu>[\w\n]*<Name>Sub Menu</Name>[\w\n]*<Document>[\w\n]*(<DocName>([a-ZA-Z0-9\.]+)</DocName>[\w\n]*)*</Menu>/
(약간의 조정으로, 이것은 약간 거칠다!) 가능성이 높지만, Regex가 갈 길이 아니라고 생각합니다. 나는 개인적으로 XPath 또는 Dom을 사용합니다
제휴하지 않습니다 StackOverflow