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

Xml 捕获多个元素层下的所有名称的XPath过滤器是什么,xml,xpath,xml-parsing,Xml,Xpath,Xml Parsing,我正在查询不同的XML响应文件以获取各种信息,并且必须从每个文件中的某些标记中捕获信息。我必须为Name元素添加标题,但是响应可以有1、2、3或更多带有名称标记的层元素/:root元素/:myelement/:Layer/:Layer[*]/:Name=如果此路径中存在名称,则仅返回名称元素。但是,我的一些响应文件可能有更深的层次, /:root元素/:myelement/:Layer/:Layer/:Layer/:Layer[*]/:Name 如果我在整个文档中搜索Name,我将得到不需要的信

我正在查询不同的XML响应文件以获取各种信息,并且必须从每个文件中的某些标记中捕获信息。我必须为
Name
元素添加标题,但是响应可以有1、2、3或更多带有名称标记的层元素
/:root元素/:myelement/:Layer/:Layer[*]/:Name=
如果此路径中存在
名称
,则仅返回
名称
元素。但是,我的一些响应文件可能有更深的层次,
/:root元素/:myelement/:Layer/:Layer/:Layer/:Layer[*]/:Name


如果我在整个文档中搜索
Name
,我将得到不需要的信息。我只想在图层中搜索“名称”。

简而言之,您需要使用子体轴

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

  • 指定要限制搜索
    Name
    要素,即:

        /root-element/myelement/Layer
    
  • 然后使用
    /
    (下降轴或自轴)仅获取 指定的
    元素下的
    名称
    元素,即:

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

        //Layer[@attr = 'val']//Name
    
  • 我只想在图层中搜索“名称”。这是否意味着XPath中
    /myelement
    /Name
    之间的所有元素都必须是all
    /Layer
    ,或者可以是任何元素?
        //Layer[@attr = 'val']//Name