Как я могу получить PHP Simplexml для сохранения <как сам, а не < - PullRequest
0 голосов
/ 06 августа 2010

В основном у меня есть скрипт, который обновляет XML-документ в разных местах ... Однако мне нужно, чтобы текст был в CDATA ... Поэтому я попытался это сделать:

                $PrintQuestion->content->multichoice->feedback->hint->Passage->Paragraph->addChild('TextFragment', '<![CDATA[' . $value[0] . ']]>');

К сожалению, когда я сохраняюXML обратно в файл, <и> в cdata соответствуют их <и $ gt;коды есть способ избежать этого? </p>

Примечание: наш анализатор не знает, как читать коды &lt; и &gt;, поэтому это серьезная проблема

после выполнения print_r моего объекта simple_xml символ <появляется как сам по себе в исходном коде! </p>

Это должен быть domsave, который преобразует его в код объекта ... любые идеи, как отключитьэто?

        //Convert SimpleXML element to DOM and save
        $dom = new DOMDocument('1.0');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = false;
        $dom->loadXML($xml->asXML());
        $dom->save($filename);

Ответы [ 3 ]

3 голосов
/ 06 августа 2010

Как я уже говорил в комментариях, SimpleXML очень ограничен в управлении, которое дает вам DOM-узлы.Ниже приведен пример замены узла DOMText узлом DOMCDATASection .

$dom = new DOMDocument;
$dom->loadXML('<root><a>foo</a></root>');
$a = $dom->documentElement->childNodes->item(0);
$a->replaceChild(
    $dom->createCDATASection('bar'),
    $a->childNodes->item(0)
);
echo $dom->saveXml($a); // <a><![CDATA[bar]]></a>

Подробный пример использования DOM см.мой ответ здесь и еще здесь

1 голос
/ 06 августа 2010

Парсер не справляется с разделами CDATA? В этом случае это не синтаксический анализатор XML, поэтому вам нужно написать инструмент, который генерирует XML-подобный вывод вместо инструмента XML. (Или исправьте парсер, чтобы он стал парсером XML)

1 голос
/ 06 августа 2010

Не можете ли вы использовать функцию html_entity_decode перед отправкой ее вашему парсеру?Он преобразует &lt и &gt обратно в < и >

...