我在使用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语句。
答案 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 . "'"; } }
我还没有测试过 - 但我觉得这样的事情可能会解决你的问题。