Как получить HTML-строку результатов XPath? - PullRequest
1 голос
/ 26 августа 2011

Учитывая этот код:

<div class="a">foo</div>
<div class="a"><div id="1">bar</div></div>

Если я хочу получить все значения div с классом a , я сделаю следующий запрос:

$q = $xpath->query('//div[@class="a"]');

Однако я получу такой результат:

foo
bar

Но я хочу получить фактическое значение, включая дочерние теги. Так это будет выглядеть так:

foo
<div id="1">bar</div>

Как мне добиться этого только с XPath и DOMDocument?


Решается предоставленной функцией здесь .

Ответы [ 3 ]

0 голосов
/ 26 августа 2011

PHP DOM имеет недокументированный атрибут '. NodeValue' , который действует точно так же, как .innerHTML в браузере. Как только вы используете XPath, чтобы получить нужный вам узел, просто наберите $node->nodeValue, чтобы получить innerhtml.

0 голосов
/ 17 марта 2015

Попробуйте что-то вроде:

$doc = new DOMDocument;
$doc->loadHTML('<div>Your HTML here.</div>');
$xpath = new DOMXpath($doc);
$node = $xpath->query('//div[@class="a"]')->item(0);
$html = $node->ownerDocument->saveHTML($node); // Get HTML of DOMElement.
0 голосов
/ 26 августа 2011

Вы можете попытаться использовать

$xml = '<?xml version=\'1.0\' encoding=\'UTF-8\' ?>
    <root>
    <div class="a">foo</div>
    <div class="a"><div id="1">bar</div></div>
    </root>';

$xml = simplexml_load_string($xml);            
var_dump($xml->xpath('//div[@class="a"]'));

Но в этом случае вам придется перебирать объекты.

Вывод:

array (2) {[0]=> object (SimpleXMLElement) # 2 (2) {["@attributes"] => array (1) {["class"] => string (1) "a"} [0] => string (3) "foo "} [1] => object (SimpleXMLElement) # 3 (2) {[" @attributes "] => array (1) {[" class "] => string (1)" a "} [" div "] => string (3) "bar"}}

...