Php 如何获取XPath结果的html字符串?

Php 如何获取XPath结果的html字符串?,php,dom,xpath,domdocument,Php,Dom,Xpath,Domdocument,考虑到这一准则: <div class="a">foo</div> <div class="a"><div id="1">bar</div></div> 但是,我将得到以下结果: foo bar 但是我想得到实际值,包括子标签。所以看起来是这样的: foo <div id="1">bar</div> 仅使用XPath和DOMDocument如何实现这一点 通过提供的函数解决。您可以尝试使用 $x

考虑到这一准则:

<div class="a">foo</div>
<div class="a"><div id="1">bar</div></div>
但是,我将得到以下结果:

foo
bar
但是我想得到实际值,包括子标签。所以看起来是这样的:

foo
<div id="1">bar</div>
仅使用XPath和DOMDocument如何实现这一点

通过提供的函数解决。

您可以尝试使用

$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"]'));
但在这种情况下,您必须迭代对象

输出:

阵列2{ [0]=> objectSimpleXMLElement2 2{ [@attributes]=> 阵列1{ [类别]=> 第1条a款 } [0]=> string3 foo } [1]=> objectSimpleXMLElement3 2{ [@attributes]=> 阵列1{ [类别]=> 第1条a款 } [div]=> 第3条 }
}PHP DOM有一个未记录的属性,其行为与浏览器中的.innerHTML完全相同。使用XPath获取所需节点后,只需执行$node->nodeValue即可获取innerhtml。

尝试以下操作:

$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.

我就是这么做的。但nodeValue不会将子元素解释为元素的实际值。但在我的例子中,它也只检索bar。对不起,你是对的。但是,它没有id属性,或者我遗漏了什么?。我的意思是,这个。而且结构相当复杂。即使它向我显示id属性,我仍然必须将所有这些内容转换为纯文本。问同样的问题。
$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.