在PHP中,如何从DOMNode获取外部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>

如果您在PHP中使用了xml,那么如何获取外部xml(即该元素中的所有xml加上元素本身)

例如,假设这是结构

<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);