2016-04-19 7 views
0

ich eine XML-Datei haben und einige davon Knoten hat einen CDATA-Block wie folgt aus:php DOMDocument - Get äußeren Knoten und Schützen <! [CDATA []] Blöcke als String

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

Und ich versuchte zu bekommen! Äußerer Knoten wie folgt:

$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); 

Und es Drucken Artikel Knoten ohne CDATA Block, aber ich möchte, dass dieser Knoten hat CDATA Blöcke.

Dank

+2

Wenn Sie CDATA Blöcke erhalten werden, dann verwenden, warum 'LIBXML_NOCDATA'? – har07

+0

Sorry, ich habe es nicht bemerkt. –

Antwort

1

Ist es nicht so einfach wie die LIBXML_NOCDATA Option zu entfernen ("Merge CDATA as text nodes")?

Für mich

$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); 

Ausgänge

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