在本文档中,如果第二列为空,则表示使用前一行的值。
<doc>
<table>
<tr><td>ASU</td><td>CS</td><td>3</td></tr>
<tr><td>ASU</td><td>English</td><td>3</td></tr>
<tr><td>ASU</td><td></td><td>4</td></tr>
<tr><td>ASU</td><td>French</td><td>3</td></tr>
</table>
<table>
<tr><td>CMU</td><td>CS</td><td>4</td></tr>
<tr><td>CMU</td><td>English</td><td>3</td></tr>
<tr><td>CMU</td><td>French</td><td>3</td></tr>
<tr><td>CMU</td><td></td><td>4</td></tr>
</table>
<table>
<tr><td>SDSU</td><td>English</td><td>3</td></tr>
<tr><td>SDSU</td><td></td><td>4</td></tr>
<tr><td>SDSU</td><td></td><td>5</td></tr>
<tr><td>SDSU</td><td>French</td><td>4</td></tr>
</table>
</doc>
我想第二列的行是English
所以这些行就是行:
<tr><td>ASU</td><td>English</td><td>3</td></tr>
<tr><td>ASU</td><td></td><td>4</td></tr>
<tr><td>CMU</td><td>English</td><td>3</td></tr>
<tr><td>SDSU</td><td>English</td><td>3</td></tr>
<tr><td>SDSU</td><td></td><td>4</td></tr>
<tr><td>SDSU</td><td></td><td>5</td></tr>
XPath会是什么?
答案 0 :(得分:2)
(这是使用XPath 1.0,可能有更好的解决方案与更新的XPath版本。)
首先,你想要tr
,所以这很简单:
/doc/table/tr[...some predicate...]
您想要的行是:
第二个tr
只包含“英语”的人
tr[2] = 'English'
或第二个tr
为空的那些......
tr[2] = ''
并且,查看以前的兄弟行没有空的tr
...
preceding-sibling::tr[td[2] != '']
第一个([1]
)有第二个tr
,其中包含“英语”
/td[2] = 'English'
因此,结合所有这些,为您提供所需行的查询是:
/doc/table/tr[td[2] = 'English'
or (td[2] = ''
and preceding-sibling::tr[td[2] != ''][1]/td[2] = 'English')]