【问题标题】:XPath expression to find elements whose tag name contains 'Name'XPath 表达式查找标签名称包含“名称”的元素
【发布时间】: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>

【问题讨论】:

    标签: xml xpath contains


    【解决方案1】:

    对于 XPath 解决方案:

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

    【讨论】:

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

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

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

    【讨论】:

    • 接近解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多