PHP DOM / xpath检查elemet span类值

时间:2017-09-12 14:21:09

标签: php html xpath

在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();
}

2 个答案:

答案 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

替代DOMDocument版本

如果您正在获取一个完整的网页,而该网页不一定是格式正确的,您可能需要使用{1}},就像您在第一个示例中一样。访问子元素有点不那么干净,但是下面的内容会起作用:

<td>

请参阅https://eval.in/860217

答案 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>'