当节点之前没有pcdata时,XPath选择第一个节点

时间:2017-01-23 11:47:41

标签: xml xpath

我有一个像这样的XML部分:

  1. <p><bold>Some Text</bold> some more content and text...</p>
    1. <p>Some Text and something <bold>bold</bold> within and more content...</p>
    2. 我正在寻找一个XPath表达式,只有当它是<bold>中的第一个内容时才返回元素<p>(如第一个示例中所示)并且如果那里没有返回任何内容标记前显示PCDATA

      我可以使用p/bold[1],但会返回两个选项的结果。

      我很感激任何建议!

2 个答案:

答案 0 :(得分:1)

如果第一个子节点是p/node()[1][self::bold]元素,您可以使用bold选择它。

答案 1 :(得分:0)

您可以使用

//p/bold[1][not(preceding-sibling::node())]

对于所有p元素,找到第一个bold元素,只有它没有前兄弟 - 即没有PCDATA出现在它之前。

您还可以检查p元素的第一个子节点,并检查它是否是bold元素,如果有很多子节点,这可能会更快地执行:

//p/node()[1][name() = 'bold']