首页 > 解决方案 > 除了 ->ownerDocument->saveXML() 是否有其他方法来获取带有标签的节点 html

问题描述

众所周知,要获取带有内部标签的节点 html,我们必须使用

$node->ownerDocument->saveXML($node);

代替

$node->nodeValue;

因为最后一个方法去掉了所有的内部标签

但是如果我得到一个像

$dom->getElementsByTagName('tr')[2]->getElementsByTagName('td')[5]

如何在不写行的情况下获取带有内部标签的 html

$dom->getElementsByTagName('tr')[2]->getElementsByTagName('td')[5]->ownerDocument->saveXML($dom->getElementsByTagName('tr')[2]->getElementsByTagName('td')[5])

还有更短的方法吗?

标签: phpdomdocument

解决方案


你没有很好地理解是什么DOMNode::ownerDocument。此属性仅返回实例所属DOMDocument的实例(在您的代码中)。DOMNode$dom

因此,您可以将长线替换为:

$cell = $dom->getElementsByTagName('tr')[2]->getElementsByTagName('td')[5];
echo $dom->saveXML($cell);

请注意,您还可以使用 DOMXPath 缩短代码。

$xp = new DOMXPath($dom);
echo $dom->saveXML($xp->query('//tr[3]/td[6]')->item(0));

推荐阅读