XPath 및 xml 구문 분석에 익숙하지 않습니다. 나는 몇 가지 문서를 읽었지만 내 문제에 대한 해결책을 찾지 못했습니다.까다로운 XPath 쿼리
<dict>
<array>
<dict>
<key>Name</key><string>Playlist 1</string>
<key>Playlist ID</key><integer>187826</integer>
<key>Playlist Persistent ID</key><string>04250E0617138909</string>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>11111</integer>
</dict>
<dict>
<key>Track ID</key><integer>22222</integer>
</dict>
</array
</dict>
<dict>
<key>Name</key><string>Playlist 2</string>
<key>Playlist ID</key><integer>187826</integer>
<key>Playlist Persistent ID</key><string>04250E0617138909</string>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>23456</integer>
</dict>
<dict>
<key>Track ID</key><integer>34567</integer>
</dict>
</array
</dict>
</dict>
내 입력이 재생 목록의 이름이 포함 된 문자열입니다 (: 그것은 "아이튠즈 뮤직 Library.xml에"의 재생 목록의 일부입니다 참고)이 같은 내 .XML 보인다. 이제 내 출력을 위해 원하는 것은 다음과 같습니다. 특정 재생 목록과 관련된 모든 songID. 불행히도이 이름은 예를 들어 배열 또는 그 첫 번째 dict의 속성이 아닙니다. 여기에 내가 무엇을 가지고 (자바 코드) :
ap.selectXPath("//dict/array/dict/string[1][text()=\"" + playlistName + "\"]");
그냥 그게 내 playlistName 물론. 이제부터 어떻게해야할까요? 파서가 원하는 이름에 도달 할 때까지 이와 같은 파일을 구문 분석하십시오. "int count"가있는
ap.selectXPath("//dict/array/dict[" + count++ +"]/string[1]");
그런 다음 적절한 위치에서 다시 시작하십시오. 다시 말하지만, 이것은 우아하고 효율적이지 않습니다.
짧은 이야기 : 내 요구 사항을 충족시키는 XPath 쿼리가 있습니까?
빠른 응답 주셔서 감사합니다. 이것은 트릭을했다 :) – hollandThomas