如何在PHP 5.0中使用DOM提取XML中的子元素?

时间:2011-05-31 12:31:02

标签: php xml

我正在使用这样的XML

  <?xml version="1.0" encoding="utf-8"?>
  <root>
      <mynode catid="10" catname="Animals" label="Animals" catdesc="" parent_id="2">
         <mynode catid="11" catname="Lions" label="Lions" catdesc="" parent_id="10">
           <mynode catid="12" catname="lion" label="lion" catdesc="" parent_id="11"/>
         <mynode catid="13" catname="lioness" label="lioness" catdesc="" parent_id="11"/>
        </mynode>
       </mynode>
    </root>

从此我想删除

<?xml version="1.0" encoding="utf-8"?>
<root>

</root>

所以预期的结果是

        <mynode catid="10" catname="Animals" label="Animals" catdesc="" parent_id="2">
         <mynode catid="11" catname="Lions" label="Lions" catdesc="" parent_id="10">
           <mynode catid="12" catname="lion" label="lion" catdesc="" parent_id="11"/>
         <mynode catid="13" catname="lioness" label="lioness" catdesc="" parent_id="11"/>
        </mynode>
       </mynode>

我该怎么做?

编辑1:TO Phil

        $dom = new DomDocument();
       //$dom->preserveWhitespace = false;
     $dom->load('treewithchild.xml'); 

function DOMinnerHTML($element) 
{ 
$innerHTML = ""; 
$children = $element->childNodes; 

foreach ($children as $child) 
{ 

    $tmp_dom = new DOMDocument(); 
    $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
    $innerHTML.=trim($tmp_dom->saveXML()); 
    echo $tmp_dom->saveXML();
} 
return $innerHTML; 
 } 
  $dom->preserveWhiteSpace = false; 

  $domTable = $dom->getElementsByTagName("mynode"); 

    foreach ($domTable as $tables) 
   { 
//echo $tables;
       DOMinnerHTML($tables); 
  } 

2 个答案:

答案 0 :(得分:1)

如果你想要<root>节点的内部标记,那就是你想要迭代的子节点的元素。您可以使用DOMDocument::documentElement属性访问此元素。

试试这个(测试和工作)

$doc = new DOMDocument;
$doc->load('treewithchild.xml');
$inner = '';
foreach ($doc->documentElement->childNodes as $child) {
    $inner .= $doc->saveXML($child);
}
echo $inner;

答案 1 :(得分:0)

我希望也会返回根元素,你必须知道,对于每个xml文件,即使它存在于你的文件中,也是一个不可思议的添加。所以试着这样做     $ children = $ element-&gt; childNodes-&gt; childNodes;
我想这会对你有帮助。