什么是XPath过滤器来捕获多个图层元素下的所有名称

时间:2015-06-24 13:21:48

标签: xml xpath xml-parsing

我正在查询不同的XML响应文件以获取各种信息,我必须从每个文件中的某些标记中捕获信息。我必须为Name元素添加标题,但响应可以包含1,2,3或更多带有名称标记的图层元素。 /:root-element/:myelement/:Layer/:Layer[*]/:Name =如果此路径中存在Name,则只返回Name元素。但是,我的一些响应文件可能有更深层次, /:root-element/:myelement/:Layer/:Layer/:Layer/:Layer[*]/:Name
如果我在整个文档中搜索Name,我将收到不需要的信息。我只想搜索"姓名"在图层中。

2 个答案:

答案 0 :(得分:0)

简而言之,您需要使用后代轴。

/root-element/myelement//Layer/Name
                       ^
_______________________|

/在XPath表达式中有多种含义,具体取决于上下文。作为位置路径的第一个字符,它使其成为绝对(相对于文档)。它分隔部分,如果前一个字符是/,它定义了后代轴。表达式的完整版本(包括轴)是:

/child::root-element/child::myelement/descendant::Layer/child:Name

答案 1 :(得分:0)

  1. 指定您希望限制搜索Name的节点 要素,即:

        /root-element/myelement/Layer
    
  2. 然后使用//(后代或自身轴)来获取 指定Name元素下的Layer元素,即:

        /root-element/myelement/Layer//Name
    

    如果所需Layer元素上方的上下文不同,您可以通过自己的//步骤将其抽象出来,甚至可以指定您想要Layer的约束,即:

        //Layer[@attr = 'val']//Name