在PHP中,如何从DOMNode获取外部XML?
如果您在PHP中使用了xml,那么如何获取外部xml(即该元素中的所有xml加上元素本身) 例如,假设这是结构在PHP中,如何从DOMNode获取外部XML?,php,xml,Php,Xml,如果您在PHP中使用了xml,那么如何获取外部xml(即该元素中的所有xml加上元素本身) 例如,假设这是结构 <car> <tire>Michelin</tire> <seats>Leather</seats> <type> <color>red</color> <make>Audi</make> </type> </car>
<car>
<tire>Michelin</tire>
<seats>Leather</seats>
<type>
<color>red</color>
<make>Audi</make>
</type>
</car>
米其林
皮衣
红色
奥迪
我有一个指向节点的指针。。。我想回去
<type>
<color>red</color>
<make>Audi</make>
</type>
红色
奥迪
如果我只是要文本,我会得到“redAudi”。您需要一份文档:
// If you don't have a document already:
$doc = new DOMDocument('1.0', 'UTF-8');
echo $doc->saveXML($node); // where $node is your DOMNode
有关更多信息,请查看文档中的DOMDocument::saveXML
将DOMNode传递给saveXML()时,只返回该节点的内容,而不是整个文档。您可以尝试以下操作:
function getInnerXml(DomNode $node){
$xml = '';
foreach($node->childNodes as $childNode){
$xml .= $node->ownerDocument->saveXml($childNode);
}
return $xml;
}
花了一个小时后,我想出了这个(似乎是最好的解决办法)
不,我有一个DOMNode(DOMDocument的子节点),我需要提取InnerXML…rojoca说DOMNode类没有提取原始XML的方法。相反,您需要将节点传递给一个全新的DOM文档,以将其重新编码为XML。这也可以工作,并且不需要创建DOMDocument-为什么不只是
return$node->ownerDocument->saveXxml($node)
?但是,您知道。。。请注意,您实际上是在请求外部xml,因为它包含节点本身。问题是,有时节点没有所有者文档。例如,如果它来自\XMLReader::expand()。
$node->ownerDocument->saveXml($node);