【问题标题】:XPATH - Selecting text within a node without a childXPATH - 在没有子节点的节点内选择文本
【发布时间】:2016-07-08 19:35:28
【问题描述】:

我对 xpath 非常陌生,希望能得到一些指导。我有以下 XML:

<dd class="conten1">
    <li class="">
      <b> Some text here </b>
      <b> another text here </b>
      <span class="date-range">2014 – Present</span>
    </li>
</dd>

我已经运行了以下 xpath:

.//dd[contains(@class, 'conten1')]/li

然后它返回:

这里有一些文字,这里有另一种文字2014 - 现在

如何删除“span”部分并仅获取

这里有一段文字,这里有一段文字

我跑了

substring-before(.//dd[contains(@class, 'conten1')]/li,'201') 

但这并不理想,因为一些主菜不包含该跨度部分,因此根本不会被检索到。

我希望抓住的只是“这里有一些文字,这里有另一种文字”部分。

真的希望得到一些帮助,并在此先感谢您。

【问题讨论】:

  • 在路径的末尾尝试 /text()...
  • 感谢您,这对您有很大帮助。如果文本采用以下格式 text 1 text 2
  • 你知道该抓什么的标准是什么?您只想要来自&lt;b&gt; 元素的所有文本吗?来自非&lt;span&gt; 元素的所有文本? XPath 表达式 'Some text here another text here' 会满足您的要求,但我认为这不是您想要的。

标签: xml xpath


【解决方案1】:

如果您只需要 b 节点,那么 XPath 可能看起来像

//dd[contains(@class, 'conten1')]/li/b

如果您需要除span 之外的所有节点,那么 XPath 可能看起来像

//dd[contains(@class, 'conten1')]/li/*[name(.)!='span']

【讨论】:

  • +1。我会将末尾的*[name(.)!='span'] 替换为*[not(self::span)],这可能会减少字符串比较。
猜你喜欢
相关资源
最近更新 更多
热门标签