首页 文章

如果它是文本节点,如何使用Xpath选择特定节点?

提问于
浏览
0

我试图选择第二个 node() 但是 only if 它是一个文本节点 .

<p><span>Span text</span> plain text</p>

我已经尝试了 /p/node()[2]/text() ,但这并不是第二个节点内的文本节点't work because there isn' . /p/node()[1]/text()'Span text'/p/text()[1]' plain text' 但它应该使用 [2] 而不是 [1] . 我可以't work out how you specify a text predicate after you'选择了节点 .

我想要的结果是这样的:

NodeList {
  length => 2,
  0 => Node('<span>Span text</span>'),
  1 => Text(' plain text')
}

其中第一个节点必须是 span ,第二个节点必须是纯文本 . 优选地,不应该匹配任何内容,如果文本节点丢失,则它不应与 span 节点匹配 .

/p/node()[1]|/p/node()[2] 在输入良好时返回我想要的内容,但它也会返回我的要求之外的匹配项 . 例如:

<p>Bad match <span>Span text</span> plain text</p>

会返回 'Bad match 'node()[1] . 此无效匹配示例应返回以下内容:

NodeList {
  length => 0
}

1 回答

  • 1

    这样的事情怎么样:

    /p[node()[2] = text()]
    

    这将选择 <p> ,第二个子节点等于文本子节点 . 然后,您可以通过选择 <p> 的任何所需子项来继续路径,例如:

    /p[node()[2] = text()]/node()[1]|/p[node()[2] = text()]/node()[2]
    

相关问题