2012-06-13 40 views
1

我正在使用我的xml文件來存儲特殊字符。如何在其中存儲xml文件特殊字符值?

這是我原來的文件

<root> 
    <popups> 
     <popup id="1"> 
      <text1> 
       <![CDATA[dynamic text popup 2a]]> 
      </text1> 
      <text2> 
       <![CDATA[dynamic text popup 2b]]> 
      </text2> 
     </popup> 
    </popups> 
</root> 

現在,當我使用PHP來保存特殊字符例如,它變得像

<root> 
    <popups> 
     <popup id="1"> 
      <text1>&lt;![CDATA[Hello world]]&gt;</text1> 
      <text2>&lt;![CDATA[asassa]]&gt;</text2> 
     </popup> 
    </popups> 
</root> 
我用下面的代碼

$this->xmlDocument = simplexml_load_file("xml/conf.xml"); 
    $pages_node = $this->xmlDocument->xpath("/root/popups/popup[@id=1]"); 

    $name = $_POST['popup-name']; 
    $editor1 = trim(strip_tags($_POST['editor1'])); 
    $editor2 = trim(strip_tags($_POST['editor2'])); 
    if (!empty($name)){ 
     if (!empty($editor1)){ 
      $pages_node[0]->text1 = "<![CDATA[".$editor1."]]>"; 
     } 
     if (!empty($editor2)){ 
      $pages_node[0]->text2 = "<![CDATA[".$editor2."]]>" ; 
     } 
     $this->xmlDocument->asXml($this->basePath() . "conf/conf.xml"); 
    } 

如何保存特殊字符而不需要對它們進行編碼?

回答

3

Simplexml的意思很簡單,所以沒有這個選項。 dom_import_simplexml可以幫助您從simplexml對象創建domdocument

您必須創建DOMDocument的新實例,然後創建CDATA節並將其放入導入的DOMElement節點。

如果您使用php DomDocument,則必須創建DOMCDATASection並將其附加到text1/text2節點。

如果你沒有text1text2節點,您必須先創建它們,然後appencd CDATA節點給他們,並最終將其追加到popup

$cdata = $dom->createCDATASection("test"); 

$text1 = $dom->createElement('text1'); 
$text1->appendChild($cdata); 

$text1 = $dom->createElement('text2'); 
$text2->appendChild($cdata); 

$popupNode->appendChild($text1); 
$popupNode->appendChild($text2);