XPath 表达式查找标签名称包含“名称”的元素

Posted

技术标签:

【中文标题】XPath 表达式查找标签名称包含“名称”的元素【英文标题】:XPath expression to find elements whose tag name contains 'Name' 【发布时间】:2013-02-02 14:24:13 【问题描述】:

我是 XPath 的新手。

我正在寻找一种方法来获取标签名称包含特定字符串的所有元素。

例如,如果我有下面这样的 XML,我想获取其标签名称包含单词“名称”的所有元素。即,我想获取以下元素:<SquareName><RectangleName><ParallelogramName>

我尝试了name()contains() 等的一些组合,但没有奏效。 请提出建议。

<Objects>
 <Four-Sided>
   <Square>
      <SquareName>ABCD</SquareName>
      <Length>4</Length>
      <Height>4</Height>
      <Colour>Blue</Colour>
   </Square>
   <Rectangle>
      <RectangleName>EFGH</RectangleName>
      <Length>10</Length>
      <Height>6</Height>
      <Colour>Brown</Colour>
   </Rectangle>
   <Parallelogram>
      <ParallelogramName>WXYZ</ParallelogramName>
      <Length>12</Length>
      <Height>4</Height>
      <Colour>Black</Colour>
   </Parallelogram>
</Four-Sided>
</Objects>

【问题讨论】:

【参考方案1】:

对于 XPath 解决方案:

//*[contains(local-name(), 'Name')]

【讨论】:

查看结果后,我发现在返回的元素中,我需要避免一个标签名称为'PeriodName'的元素。我可以以编程方式做到这一点,但想知道 XPath 是否也有解决方案? 您可以使用正则表达式,或者如果它仅用于这个,另一个谓词(或使用or 组合它们)://*[contains(local-name(), 'Name')][local-name() != 'PeriodName']【参考方案2】:

由于没有Namespace前缀,所以也可以使用

//*[contains(name(), 'Name')]

【讨论】:

接近解决方案。

以上是关于XPath 表达式查找标签名称包含“名称”的元素的主要内容,如果未能解决你的问题,请参考以下文章

xpath 轴定位表达方式

RF库XML测试通过xpath查找元素的说明

使用 selenium 函数按名称查找元素时元素不可交互,但在通过 xpath 方法使用查找元素时有效

更改 XPath 表达式中的元素名称

骆驼使用xpath检索xml标签名称

xpath按元素和属性查找节点,其中包含具有特定id的子元素