Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getting cdata (html) in a dom xml element

Tags:

dom

php

xml

I am creating an XML document with DOM and got HTML funny characters like ä and å from a database that i need to put inside an element. But i can't get it to work really.

What is the proper way to add CDATA HTML in an element so that my output becomes like this:

<TRANSLATIONS>
    <DENMARK>
        <ERRORADDRESSLINE1REQUIRED><![CDATA[&auml; &aring;]]></ERRORADDRESSLINE1REQUIRED>
    </DENMARK>
</TRANSLATIONS>

using this:

$sData = "<![CDATA[" . $value . "]]>";
$objLabel = $objXmlDoc->createElement($label, $sData);

doesn't really do the trick and appending $objXmlDoc->createCDATASection($value) creates an element next to another label and not inside a label.

What do i overlook?

like image 598
half-a-nerd Avatar asked Nov 18 '25 09:11

half-a-nerd


1 Answers

You have to append the CDATA section to the element you want it in:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('translations'))
        ->appendChild($dom->createElement('denmark'))
            ->appendChild($dom->createElement('error'))
                ->appendChild($dom->createCDataSection('&auml; &aring;'));

$dom->formatOutput = true;
echo $dom->saveXml();

Output:

<?xml version="1.0" encoding="utf-8"?>
<translations>
  <denmark>
    <error><![CDATA[&auml; &aring;]]></error>
  </denmark>
</translations>

But there should be no need to put ä and å into CDATA sections when you are using UTF-8:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('translations'))
        ->appendChild($dom->createElement('denmark'))
            ->appendChild($dom->createElement('error', 'ä and å'));

$dom->formatOutput = true;
echo $dom->saveXml();

Outputs perfectly valid:

<?xml version="1.0" encoding="utf-8"?>
<translations>
  <denmark>
    <error>ä and å</error>
  </denmark>
</translations>
like image 181
Gordon Avatar answered Nov 19 '25 22:11

Gordon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!