XSLT: сохранение пробелов при копировании атрибутов
Я пытаюсь отсортировать Microsoft Visual Studio vcproj так, чтобы diff показывал что-то значимое после, например, удаления файла из проекта. Помимо сортировки, я хочу сохранить все без изменений, включая пробелы. Вход выглядит как
пространство<File
spacespaceRelativePath="filename"
spacespace>
...
Фрагмент 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>
2 ответа
XSLT работает с древовидным представлением входного XML. Многие нерелевантные детали исходного XML были абстрагированы в этом дереве - например, порядок атрибутов, незначительный пробел между атрибутами или различие между "и" в качестве разделителя атрибутов. Я не вижу какой-либо мыслимой причины для желая написать программу, которая рассматривает эти различия как существенные.
Эти места всегда незначительны в XML, и я считаю, что нет никакой возможности контролировать это поведение в общем случае для любой библиотеки XML/XSLT.