Как предотвратить расширение объектов HTML в DOMXPath?
Я использую DOMDocument и DOMXPath в PHP для поиска элементов в HTML-документе. Этот документ содержит HTML-объекты, такие как , и я хотел бы, чтобы эти объекты были сохранены в выводе 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
Возможно, это как-то связано с LibXML, который PHP использует внутри, но я не смог найти ни одной функции, которая сохраняла бы сущности HTML.
Делать у тебя есть идея?
2 answers
XPath всегда видит представление XML-документа, в котором были расширены ссылки на сущности. Единственный способ предотвратить это - предварительно обработать XML-документ, заменив ссылки на сущности чем-то, что не будет расширено, например, изменив
на §nbsp;
.
Процессор XPath не знает, был ли указан символ пробела без торможения как
или как  ' -- the character is always provided to it as a character entity --
`.