문제

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을 사용합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top