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.