Который является лучшим подходом для удаления избыточного пробела в XML [пространство полосы или отступ = "нет"]?

Я хочу распечатать свой вывод xml в одной строке [при просмотре в блокноте или другом простом текстовом редакторе], чтобы удалить избыточный пробел в моем XML-файле. Таким образом, который является лучшим методом для следования для этого??

Я думаю, что существует две опции,
1) Использовать

  <xsl:output method="xml" indent="no"/>

2) или использовать

  <xsl:strip-space elements="*"/>

Который более эффективен, и почему?
некоторые люди предлагают, чтобы я использовал indent="no",

Я полагал, что пространство полосы подходит лучше всего, но не уверено из-за предложений, данных другими.

Чтобы быть более разработанным позволяют мне взять пример:
Вход XML:

<root>
 <node>
   <child1/>
   <child2/>
 </node>
</root>

и требуемый вывод:

<root><node><child1/><child2/></node></root>
7
задан InfantPro'Aravind' 16 November 2010 в 11:24
поделиться

2 ответа

Для того чтобы убрать все, что похоже на "отступы", может потребоваться (то есть бывают случаи, когда это необходимо) использовать и и``indent="no"``.

Возьмем самый простой пример: у вас есть преобразование тождества. Если не указать ни один из двух методов, преобразование будет воспроизводить текстовые узлы с белым пробелом только из исходного XML-документа. То есть, если исходный XML-документ имеет отступы, преобразование также выдаст результат с отступами.

Теперь добавьте к этому преобразованию . Это указывает XSLT-процессору не выполнять "красивую печать". Тем не менее, узлы из исходного XML-документа, содержащие только пробельные символы, по-прежнему копируются в выходной документ, и результирующий документ выглядит по-прежнему с отступом (потому что исходный документ имеет отступ).

Теперь, в качестве последнего шага, добавьте . Вы указали оба способа предотвращения появления в выводе узлов, содержащих только белые пробелы. Что происходит? XSLT-процессор вообще не обрабатывает узлы, содержащие только белые пробелы, и не делает отступов в выводе - вы получаете желаемый однострочный плотный вывод.

Наконец, сделайте регрессию, измените на . все еще присутствует, поэтому в выводе не воспроизводятся узлы, содержащие только пробельные символы. Но XSLT-процессор подчиняется директиве и добавляет свои собственные текстовые узлы только с пробелами.

Таким образом, из четырех возможных комбинаций только указание и , и гарантирует, что отступы не будут вызваны ни узлами с пробелами из исходного XML-документа, ни инициативой XSLT-процессора.

Даже этот последний случай, конечно, не гарантирует полностью, что на выходе не будет отступов -- если программист XSLT намеренно поместит туда код отступов, такой как

то на выходе будет присутствовать этот отступ.

12
ответ дан 6 December 2019 в 15:21
поделиться

Лучше всего измерить разницу в производительности. Реализации процессоров XSLT различаются, и вам следует провести тест самостоятельно (хотя я подозреваю, что беспокойство о производительности того или другого может в этом случае попасть в категорию «преждевременной оптимизации»).

может не иметь желаемого эффекта, если не сопровождается

<xsl:template match="text(normalize-space()='')" />

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

2
ответ дан 6 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: