【问题标题】:Only select text directly in node, not in child nodes仅直接在节点中选择文本,而不是在子节点中
【发布时间】:2011-05-27 21:44:25
【问题描述】:

如何在不选择子节点中的文本的情况下检索节点中的文本?

<div id="comment">
     <div class="title">Editor's Description</div>
     <div class="changed">Last updated: </div>
     <br class="clear">
     Lorem ipsum dolor sit amet.
</div>

换句话说,我想要Lorem ipsum dolor sit amet.而不是Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

【问题讨论】:

    标签: xpath xquery


    【解决方案1】:

    这个怎么样:
    $doc/node()[3]/text()
    假设 $doc 有 xml。

    【讨论】:

      【解决方案2】:

      在提供的 XML 文档中:

      <div id="comment">
            <div class="title">Editor's Description</div>
            <div class="changed">Last updated: </div>
            <br class="clear">
            Lorem ipsum dolor sit amet. 
      </div> 
      

      顶部元素/div 有4 个子节点,它们是文本节点。这四个text-node 孩子中的前三个是whitespace-only。这 4 个text-node 孩子中的最后一个是我们想要的。

      使用

      /div/text()[last()]
      

      这与不同:

      /div/text()
      

      后者可能(取决于 whitespace-only 节点是否被 XML 解析器保留)选择所有 4 个文本节点,但您只需要最后一个。

      另一种选择是(当您不确切知道自己想要哪个text-node 时):

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

      这会选择所有text-node-children 中的/div 不是whitespace-only 文本节点。

      【讨论】:

      • @Dimitre,仅仅因为没有什么说想要的文本将是最后一个节点?
      • @Dimitre,问题是获取没有子节点文本的文本。仅获取最后一个文本节点适用于给定的示例,但一般不能回答问题。
      • @Dimitre,事实上,由于两者,空白剥离也很有用
      • 我只是不明白为什么这两种解决方案都不适用于带有 XPather 的 Firefox,但 //div/text()[normalize-space() and parent::div[@id='comment']] 很好。
      • @Dimitre 我认为这是 XPather 的问题。您的 XPath Visualizer 和另一个工作正常,谢谢。
      【解决方案3】:

      只需选择text() 而不是.

      div/text()
      

      在给定的 XML 片段上,返回:

      Lorem ipsum dolor sit amet.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 2016-02-04
        相关资源
        最近更新 更多