【问题标题】:List all td nodes with empty content列出所有内容为空的 td 节点
【发布时间】:2015-01-02 05:58:46
【问题描述】:

我使用的是 java 1.6。我有如下的 xml 结构。

- <table column="6" row="22">
- <tr>
  <td bold="true" class="header" font="Arial Narrow" size="9">Jinesh</td> 
  <td align="Right" bold="true" font="Arial Narrow" size="9">2007</td> 
  <td align="Right" bold="true" font="Arial Narrow" size="9">2008</td> 
  <td align="Right" bold="true" font="Arial Narrow" size="9">2009E</td> 
  <td align="Right" bold="true" font="Arial Narrow" size="9">2010E</td> 
  <td align="Right" bold="true" font="Arial Narrow" size="9">2011E</td> 
  </tr>
<tr>
  <td font="Arial Narrow" size="9" /> 
  <td font="Arial Narrow" size="9" /> 
  <td font="Arial Narrow" size="9" /> 
  <td font="Arial Narrow" size="9" /> 
  <td font="Arial Narrow" size="9" /> 
  <td font="Arial Narrow" size="9" /> 
  </tr>

现在我想列出所有内容为空的 td 节点,例如第二个标签中没有任何内容。目前我正在使用下面的 Xpath 表达式列出所有 td 节点。

//table//tr//td[@font='Arial Narrow' and @size='9']

但是上面的表达式列出了所有的 td 节点,不管它是否为空。 谁能帮我用 xpath 表达式列出所有内容为空的 td 节点?

【问题讨论】:

    标签: java xml xpath


    【解决方案1】:

    您可以通过如下测试空值来查找空节点。或者,您可以添加 normalize-space() 以丢弃遇到的任何空白:

    //td[normalize-space(.)='']
    

    编辑

    Re:如果父tr节点的所有子td节点都为空,我想列出td节点

    //table/tr[not(td[normalize-space(.)!=''])]/td
    

    基本上,找到一个没有非空子 td 的 tr,然后导航到子 td。 无需再次对tds 应用必须为空的过滤器,因为我们已经在tr 级别确认了这一点。也可以通过计算空 td 和所有 td 并测试以“积极”方式对此进行测试,但我觉得消极更容易(即没有非空 td)

    【讨论】:

    • SturatLC:我正在使用 Java1.6 并使用问题中提到的 Xpath 表达式。在那种情况下,上述表达会起作用吗?可能的表达式是 //table//tr//td[@font='Arial Narrow' and @size='9' and normalize-space(.)='']?
    • 我使用了基本的 XPath 1.0 功能。是的,测试@font@class 属性也可以。鉴于 Html 元素的结构通常为 table/thead (or tbody)/tr/td
    • 表达式 //table//tr//td[@font='Arial Narrow' and @size='9' and normalize-space(.)=''] 是否正确?
    • Stuart:在上面的表达式中,如果父 tr 节点的所有子 td 节点都为空,我想列出 td 节点。在表达式中,如果至少有一个 td 为空,则在答案中定义它仍会列出该 td 节点?我们可以使用一个表达式来满足此要求吗?
    • 好的!这是表达式 //table/tr[count(td[normalize-space(.)!=''])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多