получение cdata (html) в элементе dom xml - PullRequest
3 голосов
/ 12 августа 2011

Я создаю XML-документ с помощью DOM и получаю забавные символы HTML, такие как ä и å, из базы данных, которую мне нужно поместить в элемент.Но я не могу заставить его работать на самом деле.

Как правильно добавить CDATA HTML в элемент, чтобы мой вывод выглядел следующим образом:

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

, используя это:

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

на самом деле не работает, и добавление $objXmlDoc->createCDATASection($value) создает элемент рядом с другой меткой, а не внутри метки.

Что я пропускаю?

1 Ответ

4 голосов
/ 12 августа 2011

Вы должны добавить раздел CDATA к нужному элементу:

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

Выход:

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

Но при использовании UTF-8 не должно быть необходимости ставить ä и å в секции CDATA:

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

Выходы совершенно действительны:

<?xml version="1.0" encoding="utf-8"?>
<translations>
  <denmark>
    <error>ä and å</error>
  </denmark>
</translations>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...