2013-02-18 74 views
17

我是XPath的新手。XPath表达式查找标签名称包含'Name'的元素

我正在寻找一种方法来获取其标签名称包含特定字符串的所有元素。例如,如果我的XML如下所示,我想获取其标签名称包含单词'Name'的所有元素。即,我想获取以下元素:<SquareName>,<RectangleName><ParallelogramName>

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

<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> 

回答

22

对于一个XPath解决方案:

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

看结果后,我发现元素之中的,返回,我需要避免一个标签名称为'PeriodName'的元素。我可以编程的方式做到这一点,但想知道XPath是否也有解决方案? – user2082317 2013-02-18 09:59:39

+1

您可以使用正则表达式,或者只使用正则表达式,或者只使用正则表达式,或者使用正则表达式,或者使用另一个谓词(或者使用'或'将它们合并):'// * [contains(local-name(),'Name')] [local-name )!='PeriodName']' – 2013-02-18 10:03:51

0

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

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

靠近解决方案。 – mm759 2016-12-30 19:45:30

相关问题