2010-11-05 52 views
2
編輯XML文件

我使用此代碼編輯XML文件與CDATA

$xml = simplexml_load_file($xmlfile) or die ("Unable to load XML file!"); 
$event->title = $newtitle; 
$event->description = $newdescription; 
file_put_contents($xmlfile, $xml->asXML()); 

我想添加一個CDATA在description.I使用該代碼

$event->description = '<![CDATA['.$newdescription.']]>'; 

但在XML中的<>轉換爲&lt;&gt;。如何保留CDATA原樣。是否有其他編輯方法。提前感謝。

其實我想編輯這個XML文件

<events date="06-11-2010"> 
    <event id="8"> 
     <title>Proin porttitor sollicitudin augue</title> 
     <description><![CDATA[Lorem nunc.]]></description> 
    </event> 
    </events> 
    <events date="16-11-2010"> 
    <event id="4"> 
     <title>uis aliquam dapibus</title> 
     <description><![CDATA[consequat vel, pulvinar.</createCDATASection></description> 
    </event> 
    <event id="1"><title>You can use HTML and CSS</title> 
    <description><![CDATA[Lorem ipsum dolor sit amet]]></description></event></events> 

ID爲

回答

3

我認爲你需要使用DOM當你的需求比較複雜時不再簡單。有一種方法createCDATASection

這裏有一個基本的例子:

$dom=new DOMDocument(); 
$xml='data.xml'; 
$dom->load($xml); 
$cdata=$dom->createCDATASection('<p>Foo</p>'); 
foreach ($dom->getElementsByTagName('item') as $item) { 
    $item->getElementsByTagName('content')->item(0)->appendChild($cdata); 
} 

$dom->save($xml); 

的XML與此雲:

<?xml version="1.0" encoding="utf-8"?> 
<data> 
    <item> 
     <title>Test</title> 
     <content><![CDATA[<p>Foo</p>]]></content> 
    </item> 
</data> 

至於你的榜樣和評論,下面應該可以幫助您:

$dom=new DOMDocument(); 
$dom->validateOnParse = true; 

$xml='data.xml'; 
$dom->load($xml); 

// Unless the ID attribute is recognised 
foreach ($dom->getElementsByTagName('event') as $event) { 
    $event->setIdAttribute('id', true); 
} 

$event = $dom->getElementById("1"); 
foreach ($event->getElementsByTagName('description') as $description) { 
    $cdata=$dom->createCDATASection('<p>'. $description->nodeValue .'</p>'); 
    $description->replaceChild($cdata, $description->childNodes->item(0)); 
} 

$dom->save($xml); 
+0

謝謝Cez.I編輯我的問題。我想編輯與相應的id的內容。你可以告訴它是怎麼回事? – Warrior 2010-11-05 10:11:29

+0

@THOmas:我已經添加了一個基於XML的示例。希望它應該指向正確的方向 – Cez 2010-11-05 11:05:04

+0

是他們的任何方式來鏈接xpath和xquery或dom_import_simplexml – Warrior 2010-11-05 11:41:35

-2

嘗試

$xml = simplexml_load_file($xmlfile,'SimpleXMLElement', LIBXML_NOCDATA); 

+3

-1你試過嗎?它不會解決問題 – Cez 2010-11-05 09:22:42

2

實質上,SimpleXML將轉義XML使用的所有值,因此很多使用的原因節點不在那裏。如果你確實需要他們,但不能在SimpleXML,使用另一個替代品,如DOMDocument,它的功能createCDATASection()

+0

+1你打敗了我,雖然我得到的鏈接:) – Cez 2010-11-05 09:23:50

+0

呃,儘管你有2個鏈接,而不是我1,你幾秒鐘早些時候我相信... – Wrikken 2010-11-05 09:26:55

+0

@Wrikken:睡眠不足意味着我不能說出時間。我厭倦了嗎? – Cez 2010-11-05 09:32:39