我正在尝试使用libxml2解析HTML文件。通常这种方法很好,但在这种情况下不行:
<p>
<b>Titles</b>
(Some Text)
<table>
<tr>
<td valign="top">
…Something1...
</td>
<td align="right" valign="top">
…Something2...
</td>
</tr>
</table>
</p>
我执行此查询以获取第一个<td>
//p[b='Titles']/table/tr/td[0]
但没有返回任何内容,因为libxml认为<table>
标记不是标记<p>
的子标记并跟随他。
最后问题为什么?
答案 0 :(得分:1)
//p[b='Titles']/table/tr/td[0]
错误在索引中。 XPath使用基于1的索引。
更正后的XPath表达式为:
<强> //p[b='Titles']/table/tr/td[1]
强>
答案 1 :(得分:1)
您使用的是HTML还是XML解析器? AFAIR,HTML只允许<p>
内的内联元素(您不能将<table>
放入<p>
),以便在看到<p>
代码后自动关闭<table>
代码(在HTML中,您不必关闭每个标记)。因此,您的HTML大致相当于(属性省略):
<P>
<B>Titles</B>
Some text...
<TABLE>
<TR>
<TD>...Something1...
<TD>...Something2...
</TABLE>
尝试使用libxml而不是HTML格式的XML解析器。