在回答SO中的另一篇文章(这里:SharePoint 2007, how to check if a folder exists in a document library)时,我不得不解析一个带有结构的XML文档:
D:multistatus
|--D:response
|----D:propstat
|-------D:prop
|----------D:displayname
|----------D:isFolder
是否可以构造一个XPath语句,选择一组包含D:response
等于D:displayname
且"someName"
为D:isFolder
的{{1}}个元素?
如果我选择所有"t"
元素然后循环遍历结果集,我知道该怎么做,但我相信XPath足够强大,能够以更精细的方式做到这一点。
答案 0 :(得分:4)
//D:response[D:propstat/D:prop/D:displayname="someName" and D:propstat/D:prop/D:isFolder="t"]
答案 1 :(得分:2)
如果displayname
和isFolder
出现在D:response
内的任何位置,那么这应该可行。
//D:response//[D:displayname="someName" and D:isFolder="t"]
//表示节点可以出现在层次结构中的任何位置
[...]是一个谓词,用于过滤符合给定条件的元素。
答案 2 :(得分:1)
@Jimmy Zhang回答的更短更有效的变体是
/*/D:response[D:propstat/D:prop[D:displayname='someName' and D:isFolder='t']]
它避免了低效的//
运算符(当实际知道目标元素的位置时,它会不必要地检查整个树)。它还使用嵌套谓词来避免冗余。