#xslt #vcproj
#xslt #vcproj
Вопрос:
Я пытаюсь отсортировать vcproj Microsoft Visual Studio так, чтобы diff показывал что-то значимое, например, после удаления файла из проекта. Помимо сортировки, я хочу сохранить все нетронутым, включая пробелы. Входные данные выглядят следующим образом
Космос <File
пробел RelativePath="filename"
пробел >
…
Приведенный ниже фрагмент xslt может добавлять пробелы вокруг элементов, но я не могу выяснить, как обращаться с ними вокруг атрибутов, поэтому мой вывод выглядит следующим образом
Космос <File RelativePath="filename">
xslt я использую для процессора msxsl 4.0:
<xsl:for-each select="File">
<xsl:sort select="@RelativePath"/>
<xsl:value-of select="preceding-sibling::text()[1]"/>
<xsl:copy>
<xsl:for-each select="text()|@*">
<xsl:copy/>
</xsl:for-each>
Ответ №1:
Эти пробелы всегда незначимы в XML, и я считаю, что нет возможности контролировать это поведение общим способом для любой библиотеки XML / XSLT.
Ответ №2:
XSLT работает с древовидным представлением входного XML-файла. Многие нерелевантные детали исходного XML были абстрагированы в этом дереве — например, порядок атрибутов, незначительные пробелы между атрибутами или различие между «и» в качестве разделителя атрибутов. Я не вижу какой-либо мыслимой причины для желания написать программу, которая рассматривает эти различия как существенные.
Комментарии:
1. Я бы сказал, что даже анализатор XML не заботится о порядке атрибутов или пробелах между ними в соответствии со спецификациями.