在curl请求中,我有一个具有以下结构的html表。我现在想要仅提取包含具有空类的span元素的表行,而不是具有class =“subcomponent”的表行。 我成功地尝试使用Xpath来查找具有空类的元素但是如何获得包含Version和Partnumber的整个甚至更好的特定节点。 提前谢谢。
<table>
...
<tbody>
<tr>
<td></td>
<td></td>
<td>
<span class="">Product</span>
</td>
<td>Version</td>
<td>Partnumber</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<span class="subcomponent">Component</span>
</td>
<td>Version</td>
<td>Partnumber</td>
</tr>
</tbody>
我的PHP代码
$doc = new DOMdocument();
libxml_use_internal_errors(true);
$doc->loadHTML($page);
$doc->saveHTML();
$xpath = new DOMXpath($doc);
$query ='//span[@class=""]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo $entry->C14N();
}
答案 0 :(得分:2)
要使用SimpleXML访问表行本身,您可以使用以下命令:
false
XPath的工作原理是选择所有包含子$sxml = simplexml_load_string('<table>...</table>');
$rows = $sxml->xpath('//tr[td/span[@class=""]]');
foreach ($rows as $row) {
echo "Version: ", $row->td[3], ", Partnumber: ", $row->td[4];
}
的{{1}}代码,该代码本身有一个空白类<tr>
。
在循环中,您需要按编号访问每行的子单元格,因为您的示例并未指示它们以任何其他方式标记。我假设桌面结构不会经常变化,所以应该没问题。
有关示例,请参阅https://eval.in/860169。
如果您正在获取一个完整的网页,而该网页不一定是格式正确的,您可能需要使用{1}},就像您在第一个示例中一样。访问子元素有点不那么干净,但是下面的内容会起作用:
<td>
答案 1 :(得分:-1)
我会使用下一个XPath表达式:
//td[text()="Version"] | //td[text()="Partnumber"]
这给了我:
Element='<td>Version</td>'
Element='<td>Partnumber</td>'
Element='<td>Version</td>'
Element='<td>Partnumber</td>'