2011-11-09 162 views
1

我有一個XML文件, 我想打開它,從$ _ POST輸入的值編輯某些CDATA節點,並將其保存爲同一文件, 我讀過一些在線文檔和此處結束, 有人請建議這樣做的一個很好的方式...simplexml的編輯CDATA節點

regardsh

回答

1

SimpleXML不作CDATA元素默認訪問。您可以告訴simplexml跳過它們(默認)或讀取它們(請參閱:read cdata from a rss feed)。如果你閱讀它們,它們是標準文本值,所以它們會與其他文本節點合併。

Document Object ModelDocs提供了更多的控制,它提供了從標準文本節點模型DOMText擴展的DOMCdataSection

即使這是一個不同的PHP庫(DOM vs. SimpleXML),它們都是相互兼容的。例如,SimpleXMLElement可以通過使用dom_import_simplexml函數轉換爲DOMElement

如果您發佈了一些代碼,那麼您應該很容易找出如何訪問要修改的CDATA部分。請提供一些演示XML數據,以便示例更具說話性。

+0

現在我已經找到了一種方法來添加CDATA與任何庫或方法可能會在這裏http://coffeerings.posterous.com/php-simplexml-and-cdata。 thnx爲你的幫助。 – pahnin

+0

和thanx的解釋 – pahnin

+0

Upvote appreceated;) - 您提到的鏈接是使SimpleXML讀取CDATA節(另請參閱:[從rss提要讀取cdata](http://stackoverflow.com/questions/8020181/)讀CDATA-從-A-RSS源/ 8020274#8020274))。我想知道是否需要專門編輯CDATA部分(如果是這樣,請添加一些示例XML)或只是(合併)的文本對您而言是好的。 – hakre

1

由於最近我有同樣的問題,我想讓人們也看到一些代碼,因爲鏈接的例子只能添加新的CDATA部分,但不要刪除舊的。所以「我的」解決方案從上述代碼示例合併,並刪除舊的CDATA節點。

// get DOM node 
$node = dom_import_simplexml($mySimpleXmlElement); 


// remove existing CDATA ($node->childNodes->item(1) does not seem to work) 
foreach($node->childNodes as $child) { 
    if ($child->nodeType == XML_CDATA_SECTION_NODE) { 
    $node->removeChild($child); 
    } 
} 

// add new CDATA 
$no = $node->ownerDocument; 
$node->appendChild($no->createCDATASection($myNewContent)); 

// print result 
echo $xml->asXML();