2011-07-30 24 views
0
$loopc = 0; 
foreach($xmls->url as $url) { 
    $num = $xmls->count(); 
    if ($loopc <= $num) { 
     insertNode($xmls, 'url['.$loopc.']', 'image:image', NULL); 
     insertNode($xmls, 'url['.$loopc.']->image', 'image:loc', 'urldata'); 
     $loopc = $loopc+1; 
    } else { 
     break; 
    } 
} 
echo $xmls->asXML(); 

function insertNode(SimpleXMLElement $xml, $path, $qname, $val) { 
    eval('$cur = $xml->'.$path.';'); 
    $sd = dom_import_simplexml($cur); 
    $newNode = $sd->ownerDocument->createElement($qname, $val); 
    $newNode = $sd->appendChild($newNode); 
    return simplexml_import_dom($newNode); 
} 

,我试图让它借此XML:PHP使用DOM导入简单的XML元素前缀

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.sitemaps.org/schemas/sitemap-image/1.1" xmlns:video="http://www.sitemaps.org/schemas/sitemap-video/1.1"> 
<url> 
    <loc>http://truefoodlooks.comcompare.php?id=49</loc> 
</url> 
</urlset> 

,使它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.sitemaps.org/schemas/sitemap-image/1.1" xmlns:video="http://www.sitemaps.org/schemas/sitemap-video/1.1"> 
<url> 
    <loc>http://truefoodlooks.comcompare.php?id=49</loc> 
    <image:image> 
     <image:loc>urldata</image:loc> 
    </image:image> 
</url> 
</urlset> 

但是,当我尝试做第二个insertNode()我得到这个错误:

Warning: dom_import_simplexml(): Invalid Nodetype to import in /volume1/web/truefoodlooks/test/index.php on line 47

我该如何解决这个问题?

回答

0

无法将复杂的对象语法作为字符串传递。我在你的代码中做了一些修改来解决你的问题,但它不是一个好方法:

 $loopc = 0; 
    foreach($xmls->url as $url) { 
     $num = $xmls->count(); 
     if ($loopc <= $num) { 
      insertNode($xmls, 'url',$loopc,'image:image', NULL); 
      insertNode($xmls->url[$loopc], 'image:image',NULL, 'image:loc', 'urldata'); 
      $loopc = $loopc+1; 
     } else { 
      break; 
     } 
    } 
    echo $xmls->asXML(); 

    function insertNode(SimpleXMLElement $xml, $pathName, $pathIndex, $qname, $val) { 

     if(!is_null($pathIndex)) 
     { 
       $cur = $xml->{$pathName}[$pathIndex]; 
     } 
     else{ 
       $cur = $xml->{$pathName}; 
     } 
     $sd = dom_import_simplexml($cur); 
     $newNode = $sd->ownerDocument->createElement($qname, $val); 
     $newNode = $sd->appendChild($newNode); 
     return simplexml_import_dom($newNode); 
    } 
+0

你为什么说它不是一个好方法? – nat45928

+0

因为如果您想要SimpleXml返回,您不需要将SimpleXml转换为dom。只需使用$ simpleXMlElement-> addChild('node','value')即可。另一件事是,如果你想传递一个像'obj-> prop [0]'这样的字符串的对象语法,你将不得不为此构建一个解析器。 –

相关问题