I have this code to create and update xml file:
<?php $xmlFile = 'config.xml'; $xml = new SimpleXmlElement('<site/>'); $xml->title = 'Site Title'; $xml->title->addAttribute('lang', 'en'); $xml->saveXML($xmlFile); ?>
This generates the following xml file:
<?xml version="1.0"?> <site> <title lang="en">Site Title</title> </site>
The question is: is there a way to add CDATA with this method/technique to create xml code below?
<?xml version="1.0"?> <site> <title lang="en"><![CDATA[Site Title]]></title> </site>
CDATA sections may be added anywhere character data may occur; they are used to escape blocks of text containing characters which would otherwise be recognized as markup. CDATA sections begin with the string " <! [CDATA[ " and end with the string " ]]> ".
C Data Handles ¶C array elements can be accessed as regular PHP array elements, e.g. $cdata[$offset] C arrays can be iterated using foreach statements. C arrays can be used as arguments of count(). C pointers can be dereferenced as arrays, e.g. $cdata[0]
No, The markup denoting a CDATA Section is not permitted as the value of an attribute.
Got it! I adapted the code from this great solution (archived version):
<?php // http://coffeerings.posterous.com/php-simplexml-and-cdata class SimpleXMLExtended extends SimpleXMLElement { public function addCData( $cdata_text ) { $node = dom_import_simplexml( $this ); $no = $node->ownerDocument; $node->appendChild( $no->createCDATASection( $cdata_text ) ); } } $xmlFile = 'config.xml'; // instead of $xml = new SimpleXMLElement( '<site/>' ); $xml = new SimpleXMLExtended( '<site/>' ); $xml->title = NULL; // VERY IMPORTANT! We need a node where to append $xml->title->addCData( 'Site Title' ); $xml->title->addAttribute( 'lang', 'en' ); $xml->saveXML( $xmlFile ); ?>
XML file generated:
<?xml version="1.0"?> <site> <title lang="en"><![CDATA[Site Title]]></title> </site>
Thank you Petah
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With