2011-05-31 37 views
0

我有这样的在PHP 5.0中如何使用DOM提取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> 

的XML
</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:菲尔

 $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); 
    } 
+0

@phil在我来说,我正在一个XML不适合我 – svk 2011-05-31 13:57:54

+0

使用saveXML(一HTML.It没有工作),而不是saveHTML()方法 – Phil 2011-05-31 14:02:31

+0

@phil我试图在打印'echo $ tmp_dom-> saveXML()时没有得到任何东西;'?是否有任何需要更改的内容 – svk 2011-05-31 14:11:30

回答

1

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

试试这个(测试工作)

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

我想到的是,根元素也回来了,你要知道,每一个XML文件中添加impliicitly,即使它在你的文件存在。所以试着做到这一点
$ children = $ element-> childNodes-> childNodes;
我认为那对你有帮助。

+0

请您简单解释一下,或给出任何示例代码。由于该方法不适合我 – svk 2011-05-31 14:40:45

相关问题