2013-06-24 4 views
0

Обработка CDATA с помощью lxml включает в себя создание синтаксического анализатора с подходящей декларацией, но как насчет XSLT? Например:lxml XSLT удаляет CDATA при обработке XML

from lxml import etree 

parser = etree.XMLParser(strip_cdata=False) 
tree = etree.parse('sample_with_cdata.xml', parser) 
transform = etree.XSLT(etree.parse('dupe.xsl')) 
xml_out = transform(tree) 
xml_out.write('processed.xml') 

Если я обрабатывать XML-файл с CDATA через LXML процессор XSLT, все CDATA раздели. Как я могу сказать XSLT-процессору оставить CDATA как есть?

PS. FYI, добавив тот же парсер к etree.XSLT не изменил результат

ответ

1

Что касается XSLT касается разделов CDATA в XML только шум. XSLT рассматривает <![CDATA["]]> то же самое, что и &quot;, которое оно относится к "; это разные способы для автора документа написать одно и то же.

Если вы используете разделы CDATA на своем входе для передачи информации, то есть, если <![CDATA[xxx]]> означает что-то отличное от xxx, тогда вам нужно изменить свой XML-дизайн.

+0

Мой XML - это RSS, а элемент описания содержит CDATA для базового форматирования. – theta

1

Это, похоже, не связано с lxml. Это моя нехватка знаний ...

CDATA в XSLT должен обрабатываться с атрибутом «cdata-section-elements» в объявлении вывода. Например, если элемент описания в файле XML содержит CDATA:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" cdata-section-elements='description' /> 
...