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 表达式查找标签名称包含“名称”的元素的主要内容,如果未能解决你的问题,请参考以下文章