2016-04-19 44 views
0

我有一個XML文件,它的一些節點有一個CDATA塊這樣的:PHP的DOMDocument - 獲取外部節點和保護<![CDATA []]塊作爲字符串

<item> 
    <content>OneWord</content> 
</item> 
<item> 
    <content><![CDATA[Some Text or Serialized arrays]]></content> 
</item> 

我試圖得到!外節點如下:

$file = 'file.xml'; 
$contents = file_get_contents($file); 
$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->loadXML($contents, LIBXML_NOCDATA); 
$xpath = new DOMXPath($dom); 

// -- get outer 
$item = $xpath->query('./item')->item(1); 
$str = $dom->saveXML($item); 
var_dump($str); 

而且它打印沒有CDATA塊的項目節點,但我希望該節點具有CDATA塊。

感謝

+2

如果你想保留CDATA塊,那麼爲什麼要用'LIBXML_NOCDATA'? – har07

+0

對不起,我沒有注意到。 –

回答

1

這不是去掉了LIBXML_NOCDATA選項( 「Merge CDATA as text nodes」)一樣簡單?

對於我來說,

$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->loadXML($contents); 
$xpath = new DOMXPath($dom); 

// -- get outer 
$item = $xpath->query('./item')->item(1); 
$str = $dom->saveXML($item); 
var_dump($str); 

輸出

string '<item> 
<content><![CDATA[Some Text or Serialized arrays]]></content> 
</item>' (length=78)