2013-07-11 27 views
-1
<source>   
    <job> 
    <title><![CDATA[newsTitle]]></title> 
    <date><![CDATA[newsTo]]></date> 
    ....... 

現在,我需要之後<source>標籤添加如何在XML的第一個元素之前插入子註釋?

<publisher>abc</publisher> 
<publisherurl>http://google.com</publisherurl>  

。我嘗試了下面的代碼,但它在源標籤後面添加!

$doc = new DOMDocument(); 
$doc->load('C:\test.xml', LIBXML_NOBLANKS);  
$xpath = new DOMXPath($doc); 
$hrefs = $xpath->evaluate("/source"); 
$href = $hrefs->item(0); 
$link = $doc->createElement("publisher","abc"); 
$href->appendChild($link); 
$link = $doc->createElement("publisherurl","www.google.com"); 
$href->appendChild($link); 

print $doc->save('C:\test.xml'); 

如何在源碼之後添加這些節點?

+0

這是PHP嗎?如果是這樣,標記它會有所幫助。 –

+0

爲什麼包含''節點的變量名爲'href'? [複製粘貼](http://stackoverflow.com/questions/3291742/)你的代碼,但忘了重命名變量? – Tomalak

+0

替代解決方案:添加帶有ID或時間戳的節點,讓他們隨時隨地添加,並在閱讀時按最新添加進行排序。 – michi

回答

2
<?php 
$rssDoc = new DOMDocument(); 
$rss_file = 'C:\test.xml'; 
$rssDoc->load($rss_file); 
$items = $rssDoc->getElementsByTagName('source'); 

$firstItem = $items->item(0); 

$newItem[] = $rssDoc->createElement('lastBuildDate', 'Fri, 10 Dec 2008 22:49:39 GMT'); 
$newItem[] = $rssDoc->createElement('publisherurl', 'http://www.xyz.com'); 
$newItem[] = $rssDoc->createElement('publisher', 'XYZ'); 
foreach ($newItem as $xmlItem){ 
$firstItem->insertBefore($xmlItem,$firstItem->firstChild); 
} 

echo $rssDoc->save('C:\test.xml'); 
?> 

嘿,馬諾庫馬爾給出的例子,這應該爲你工作。嘗試這個。 :)

0

最後我找到了解決方案。不過我有幾個疑問,

$rssDoc = new DOMDocument(); 
$rss_file = 'C:\test.xml'; 
$rssDoc->load($rss_file); 
$items = $rssDoc->getElementsByTagName('source'); 

$newItem = $rssDoc->createElement('lastBuildDate', 'Fri, 10 Dec 2008 22:49:39 GMT'); 
$rssDoc->appendChild($newItem); 
$firstItem = $items->item(0); 
$firstItem->insertBefore($newItem,$firstItem->firstChild); 

$newItem = $rssDoc->createElement('publisherurl', 'http://google.com'); 
$rssDoc->appendChild($newItem); 
$firstItem = $items->item(0); 
$firstItem->insertBefore($newItem,$firstItem->firstChild); 

$newItem = $rssDoc->createElement('publisher', 'newschannel'); 
$rssDoc->appendChild($newItem); 
$firstItem = $items->item(0); 
$firstItem->insertBefore($newItem,$firstItem->firstChild); 

echo $rssDoc->saveXML(); 

是否有可能追加這些孩子陸續在環路和之前類似的插入呢?

相關問題