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.

Другие вопросы по тегам