我在PHP中使用DOMDocument和DOMXPath来查找HTML文档中的元素。 本文档包含HTML实体,例如& nbsp;我希望这些实体保留在XPath输出中。
$doc = new DOMDocument();
$doc->loadHTML('<html><head></head><body> Test</body></html>');
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//body');
foreach($nodes as $node) {
echo $node->textContent;
}
此代码生成以下输出(UTF-8):
[space]Test
但我想有这个:
Test
也许它与PHP在内部使用的LibXML有关,但我找不到任何保留HTML实体的函数。
你有什么想法吗?
答案 0 :(得分:4)
XPath始终会看到已扩展实体引用的XML文档的表示形式。防止这种情况的唯一方法是预处理XML文档,用不会展开的东西替换实体引用,例如将
更改为§nbsp;
。
答案 1 :(得分:2)
XPath处理器不知道不间断的空格字符被指定为
或 ' -- the character is always provided to it as a character entity --
`。