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

29

我是XPath的新手。

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

例如,如果我有下面的XML,我想获取所有标签名称包含单词“Name”的元素。也就是,我想获取以下元素:<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>
2个回答

41

使用XPath解决方案:

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

在查看结果后,我发现在返回的元素中,我需要避免一个标签名称为“PeriodName”的元素。我可以通过编程来实现,但想知道XPath是否也有解决方案? - user2082317
2
你可以使用正则表达式,或者如果只是针对这一个,另一个谓词(或使用 or 组合它们)://*[contains(local-name(), 'Name')][local-name() != 'PeriodName'] - Jens Erat

1

由于没有命名空间前缀,您也可以使用

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

1
接近解决方案。 - mm759

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接