【问题标题】:Xpath - get only node content without other elementsXpath - 仅获取节点内容而不获取其他元素
【发布时间】:2010-12-15 22:38:42
【问题描述】:

我有一个div elemet:

<div>
   This is some text
   <h1>This is a title</h1>
   <div>Some other content</div>
</div>

我应该使用什么 xpath 表达式来仅获取没有他的子元素的 div 内容 h1div

//div[not(h1)&amp;not(div)]

类似的东西?我想不通

【问题讨论】:

  • 好问题,+1。请参阅我对三个 XPath 表达式的回答,这些表达式可能会为您提供 div 元素的未定义“内容”。

标签: xpath


【解决方案1】:

要获取div的字符串值,请使用

string(/div)

这是作为(顶部)div 元素的后代的所有文本节点的串联。

要选择div 的所有文本节点后代,请使用

/div//text()

要仅获取作为div 直接子级的文本节点,请使用

/div/text()

最后,得到div的第一个(希望是唯一的)非空白文本节点子节点

/div/text()[normalize-space()][1]

【讨论】:

  • 您的答案仅显示了如何获取父节点及其后代的文本或仅后代。我确定问题是如何仅获取父节点文本,而没有后代(例如问题示例中的This is some text
  • @EduardSukharev,答案正确地提供了这个表达式:/div/text() 通常,人们可能不知道div 的哪个文本节点子节点是想要的。可能还有其他纯空白节点。因此,必须提供他们感兴趣的节点的位置...如果指定div 的只有一个文本子节点是非纯空格节点,则选择该节点的表达式为:/div/text()[not(normalize-space())][1]我已经编辑了这个问题。请撤销您的反对意见,并考虑立即投票。
  • 我的错,我把text nodes 误解为nodes,这显然不是你的意思。而且,是的,您的回答是正确、完整和彻底的。谢谢。
【解决方案2】:

我应该使用什么 xpath 表达式 只得到没有他的div 内容 子元素h1div

这个 XPath 表达式:

/div/node()[not(self::h1|self::div)]

它选择除h1div 元素之外的每个div 根元素的子元素。

【讨论】:

    【解决方案3】:

    ./text() 这样的表达式将只检索根元素的内容。

    问候, 尼丁

    【讨论】:

      【解决方案4】:

      您可以使用这个 XPath 表达式:

      ./div[1]/text()[1]
      

      为了测试,我使用这个在线测试器:http://xpather.com/

      【讨论】:

        猜你喜欢
        • 2021-06-21
        • 2015-02-20
        • 2015-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多