【问题标题】:XPATH to select all nodes which are not emptyXPATH 选择所有不为空的节点
【发布时间】:2015-07-16 18:33:06
【问题描述】:

如何选择所有具有一定值且不为空的节点?例如,我有以下 XML:

    <bbb>
        <aaa/>
        <bbb/>
        <ccc>23</ccc>
        <ddd/>
        <eee>Health</eee>
        <fff/>
    </bbb>

这里我想选择那些是 bbb 的子节点并且有一些值的节点,即节点 ccc 和 eee。

【问题讨论】:

  • 您要选择也只包含空格的节点还是应该忽略它们?
  • 空白应该被忽略@DanielHaley

标签: xml xpath


【解决方案1】:

选择那些是 bbb 的子节点并具有某些值的节点

如果要包含仅包含空格的节点,请尝试:

/bbb/*[string()]

如果您想忽略仅包含空格 (&lt;x&gt; &lt;/x&gt;) 的节点,请尝试:

/bbb/*[normalize-space()]

【讨论】:

  • 我怀疑/bbb/*[not(empty(.))] 在大多数处理器上会更有效,因为节点的值不需要被访问和潜在地转换。
【解决方案2】:

这应该可行:

/bbb/*[.!='']

值不为空的 bbb 的所有子节点。

【讨论】:

  • 这也会选择只包含空格的节点。
  • 确实如此。在 OP 说他只想忽略带有空格的节点之前,我写了这个答案。
  • 是的,我的评论更多是针对 OP(和/或未来的访问者),以便他/她知道您的 xpath 选择了什么。您对原始问题的回答完全没有问题。 :-)
【解决方案3】:

只有当有文本值时才获取所有节点:

/bbb/*[text()]

【讨论】:

  • 这也会选择只包含空格的节点。
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多