代码之家  ›  专栏  ›  技术社区  ›  naivists

要求适用于比结果集中节点更深的节点的xpath

  •  2
  • naivists  · 技术社区  · 15 年前

    在我对另一篇文章的回答中,在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 "t" ?

    我知道如果我全选怎么做 D:反应 元素,然后循环遍历结果集,但我相信xpath足够强大,能够以更微妙的方式实现这一点。

    3 回复  |  直到 15 年前
        1
  •  4
  •   vtd-xml-author    15 年前
    //D:response[D:propstat/D:prop/D:displayname="someName" and D:propstat/D:prop/D:isFolder="t"]
    
        2
  •  2
  •   Anurag    15 年前

    如果 displayname isFolder 可以出现在 D:response ,这样就可以了。

    //D:response//[D:displayname="someName" and D:isFolder="t"]
    

    //表示节点可以出现在层次结构中的任何位置,

    […]是一个谓词,用于筛选与给定条件匹配的元素。

        3
  •  1
  •   Tomalak    15 年前

    @jimmy zhang的答案的一个简短而有效的变体是

    /*/D:response[D:propstat/D:prop[D:displayname='someName' and D:isFolder='t']]
    

    它避免了效率低下 // 运算符(当目标元素的位置实际已知时,不必要地检查整棵树)。它还使用嵌套谓词来避免冗余。