2

我正在尝试使用 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>并跟随他。

最后是为什么?

4

2 回答 2

1
//p[b='Titles']/table/tr/td[0]

错误在索引中。XPath 使用从 1 开始的索引

更正后的 XPath 表达式为:

//p[b='Titles']/table/tr/td[1]

于 2010-06-06T12:35:45.917 回答
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>

尝试使用 XML 解析器形式 libxml 而不是 HTML。

于 2010-06-06T13:03:56.143 回答