Может ли Нокогири сохранить стиль цитирования атрибутов? - PullRequest
2 голосов
/ 08 декабря 2011

Вот содержимое моего файла (обратите внимание на вложенные кавычки):

<?xml version="1.0" encoding="utf-8"?>
        <property name="eventData" value='{"key":"value"}'/>

в Ruby у меня есть:

file = File.read(settings.test_file)      
@xml = Nokogiri::XML( file)
puts "@xml  " + @xml.to_s

и вот вывод:

<property name="eventData" value="{&quot;key&quot;:&quot;value&quot;}"/>

Есть ли способ преобразовать его так, чтобы вывод точно сохранял кавычки?то есть один снаружи, двойной внутри?

1 Ответ

4 голосов
/ 08 декабря 2011

Нет, не может. В Nokogiri::XML::Attr (и в базовой структуре данных в libxml2) не хранится информация о том, какой тип кавычек использовался (или должен использоваться) для разделения атрибута. Таким образом, вся сериализация (выполняется libxml2) использует один и тот же стиль цитирования атрибутов.

Действительно, эта информация даже не сохраняется должным образом в информационном наборе XML, как описано в спецификациях :

Приложение D. Что не входит в информационный набор

Следующая информация не представлена ​​в текущей версии информационного набора XML (этот список не является исчерпывающим):

[...]

17) Тип кавычек (одинарный или двойной), используемый для цитирования значений атрибутов.

Хорошая новость заключается в том, что два стиля сериализации XML описывают один и тот же контент. Плохая новость заключается в том, что если вы не используете каноническую сериализацию XML (которую Nokogiri еще не может произвести , которую только недавно удалось произвести), существует большое разнообразие способов представления одного и того же документа, который выглядел бы как множество ложных «изменений» в стандартном инструменте для разброса текста.

Возможно, если вы сможете описать, почему вы хотели эту функцию (какую конечную цель вы пытаетесь достичь?), Мы могли бы помочь вам в дальнейшем.

Вас также может заинтересовать этот похожий вопрос .

...