我正在尝试检索位于此span类属性中的正文文本。
<span id="" style="color:#525B64;">The quick brown fox jumped over the lazy dog.</span>
我在我的网络服务器上测试了它,但没有错误,但页面是空白的。我对此很新,所以我不知道从哪里开始。
这是我的代码。
<?php
// Load remote file, supress parse errors
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->loadHTMLFile('http://somewebpage.com');
libxml_clear_errors();
// use XPath to find all nodes with a class attribute of header
$xp = new DOMXpath($dom);
$nodes = $xp->query('//span[@class="msgBody"]');
// output first item's content
echo $nodes->item(0)->nodeValue;
?>
答案 0 :(得分:3)
此代码中的一切似乎都很好。
我要做的是:
file_get_contents
加载远程文件以查看其是否正确加载//*
的XPath查询文档,并循环生成DOMNodeList
(使用foreach)以查看树是否正确构建。顺便说一下。为了抑制->loadHTMLFile()
方法报告的解析错误,我使用@
运算符。
答案 1 :(得分:1)
DOM创建用于外包的节点:属性,文本,注释,元素,您可以为其命名。所以你不是在追求span节点的值,即使它看起来像那样,你实际上想要在span中获取TextNode并获得其值。尝试类似:
echo $nodes->item(0)->childNodes->item(0)->nodeValue
您也可以直接从xpath查询中获取此信息:
$nodes = $xp->query('//span[@class="msgBody"]/text()');
(虽然我个人从来没有幸运过xpath。)
答案 2 :(得分:1)
您确定要解析的文档中只有一个span
个元素?
也许->item(0)
返回空元素,列表中的下一个所需元素是什么?
答案 3 :(得分:1)
此类行为通常是由默认命名空间引起的(请检查是否存在与此类似的内容:xmlhs="http://www.w3.org/1999/xhtml"
)。
在XPath表达式中使用默认命名空间中的元素名称是xpath标记中最常见的FAQ - 只需搜索“ xpath default namespace ”即可找到许多好的答案。