XPath的。确定刮表的行

时间:2014-03-24 18:32:54

标签: php xpath

我在使用XPath创建INSERT语句时遇到问题。这是我的表:

<table>
  <tr>
    <td class="messagecellbody">row1 cell1</td>
    <td class="messagecellbody">row1 cell2</td>
    <td class="messagecellbody">row1 cell3</td>
  </tr>
  <tr>
    <td class="messagecellbody">row2 cell1</td>
    <td class="messagecellbody">row2 cell2</td>
    <td class="messagecellbody">row2 cell3</td>
  </tr>
</table>

理想情况下输出是这样的:

INSERT INTO database_table(column1,column2,column3)VALUES(&#39; row1 cell1&#39;,&#39; row1 cell2&#39;,&#39; row1 cell3&#39;); INSERT INTO database_table(column1,column2,column3)VALUES(&#39; row2 cell1&#39;,&#39; row2 cell2&#39;,&#39; row2 cell3&#39;);

我使用的代码是:

$my_xpath_query = "//table//td[contains(@class, 'messagecellbody')]";
$result_rows = $xpath->query($my_xpath_query);

foreach ($result_rows as $result_object) {
    echo "'" . $result_object->nodeValue . "'";
}

这可以正确地找到每个,但输出是所有6个单元格的单元格内容。我不知道如何在每一行上打破它(所以我可以回应&#39; INSERT INTO database_table&#39;等等)

如果我插入一个额外的参数,我可以按列号过滤它,例如以下将给出第一列

$my_xpath_query = "//table//td[contains(@class, 'messagecellbody')][1]";

但问题仍然是不知道行何时结束而另一行开始。如果没有这个,很难创建我的INSERT语句。

1 个答案:

答案 0 :(得分:0)

也许尝试将TR行作为Xpath搜索中的单个对象。是否有任何TR元素,您的孩子不想包括?

然后您就可以获得这些对象的子节点(即您正在寻找的TD元素)。

类似的东西:

$my_xpath_query = "//table//tr";
$result_rows = $xpath->query($my_xpath_query);

foreach ($result_rows as $result_object) {
    foreach($result_object->childNodes as $td) {
         echo "'" . $td->nodeValue . "'";
    }  
}

我还没有测试过 - 但我觉得这样的事情可能会解决你的问题。