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