除了 ->ownerDocument->saveXML() 之外还有其他方法来获取带有标签的节点 html

Is there another way except ->ownerDocument->saveXML() to get node html with tags

我们知道,要获取节点 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])

还有更短的路吗?

你没有很好地理解DOMNode::ownerDocument是什么。这个 属性 returns 只不过是 DOMNode 实例所属的 DOMDocument 实例(您的代码中的 $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));