我正在尝试解析一个充满.htm文件的文件夹。所有这些文件都包含需要删除的1个特定元素。
它是td
元素class="hide"
。到目前为止,这是我的代码。
$dir. entry
是文件的完整路径。
$page = ($dir . $entry);
$this->domDoc->loadHTMLFile($page);
// Use xpath query to find the menu and remove it
$nodeList = $xpath->query('//td[@class="hide"]');
不幸的是,这是事情已经出错的地方。如果我执行了var_dump
节点列表,我会得到以下结果:
object(DOMNodeList)#5 (0) { }
请大家知道我想要选择的内容,这里有一段摘录:
<td width="160" align="left" valign="top" class="hide">
lots of other TD's and content here
</td>
到目前为止,有人看到我提出的问题有什么不妥吗?
答案 0 :(得分:5)
Var转储xpath节点列表对象不显示任何内容。 Var转储节点列表的长度。
var_dump($nodeList->length);
如果值大于0,则可以使用foreach迭代它:
foreach($nodeList as $node)var_dump($node->tagName);
希望这有帮助。
有关进一步说明,请参阅完整的代码片段:
<?php
$html = <<<END
<html>
<body>
<td>
</td>
<td class="hide"></td>
<td class="hide"></td>
</body>
</html>
END;
$dom = new DOMDocument;
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$nodeList = $xpath->query('//td[@class="hide"]');
// Shows a blank object
var_dump($nodeList);
// Shows 2
var_dump($nodeList->length);
// Echo out all the tag names.
foreach($nodeList as $node){
echo $node->tagName . "\n";
}
?>
答案 1 :(得分:3)
也许您的class
元素的td
属性中有一个以上的课程:
<td class="hide anotherclass">
所以'//td[@class="hide"]'
只匹配:
<td class="hide">
请尝试这样做以查看它是否包含您要查找的hide
课程:
$nodeList = $xpath->query('//td[contains(@class,"hide")]');
答案 2 :(得分:3)
您的初始文件是xhtml(即<html xmlns="http://www.w3.org/1999/xhtml">
)吗?如果是,那么您的元素将被命名空间,您需要使用$xpath->registerNamespace
设置前缀映射,然后在表达式中使用此前缀
$xpath->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
$nodeList = $xpath->query('//xhtml:td[@class="hide"]');