Я сейчас вхожу в мир XSLT, потому что мне нужно сделать преобразование между двумя файлами XML.XSLT: Вставить новую строку между двумя элементами в шаблоне
Я начинаю, но у меня возникает небольшая проблема, которая делает мои файлы мало читаемыми для каждого поколения.
Я в качестве входных данных в XML, который:
<?xml version="1.0" encoding="utf-8"?>
<ConfigurationNodes>
<Versions>
<PackagesA Version="1.8" />
<PackageB Version="1.1" />
<PackageC Version="1.7" />
</Versions>
<ConfigurationNode Type="SomeSpecialType">
<Name>MyName</Name>
<Revision>0</Revision>
<Description >The big full description here</Description>
</ConfigurationNode>
</ConfigurationNodes>
На которой я в настоящее время применяется следующее преобразование:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:template match="ConfigurationNode[@Type='SomeSpecialType']">
<Object Name="Configuration" NodeType="SomeOtherType">
<Property Name="Name" Value="{Name/text()}" Type="System.String"/>
<Property Name="Description" Value="{Description/text()}" Type="System.String"/>
<Property Name="Revision" Value="{Revision/text()}" Type="System.Int32" />
</Object>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Эта работа, но в настоящее время мои Property
элементы находятся на одной и той же линии (и в моем реальном случае у меня здесь 10 объектов):
<?xml version="1.0" encoding="utf-8"?>
<ConfigurationNodes>
<Versions>
<PackagesA Version="1.8" />
<PackageB Version="1.1" />
<PackageC Version="1.7" />
</Versions>
<Object Name="Configuration" NodeType="SomeOtherType"><Property Name="Name" Value="MyName" Type="System.String" /><Property Name="Description" Value="The big full description here" Type="System.String" /><Property Name="Revision" Value="0" Type="System.Int32" /></Object>
</ConfigurationNodes>
Мой Цель состоит в том, чтобы иметь
<?xml version="1.0" encoding="utf-8"?>
<ConfigurationNodes>
<Versions>
<PackagesA Version="1.8" />
<PackageB Version="1.1" />
<PackageC Version="1.7" />
</Versions>
<Object Name="Configuration" NodeType="SomeOtherType">
<Property Name="Name" Value="MyName" Type="System.String" />
<Property Name="Description" Value="The big full description here" Type="System.String" />
<Property Name="Revision" Value="0" Type="System.Int32" />
</Object>
</ConfigurationNodes>
После некоторых исследований, я пытался поставить <xsl:preserve-space elements="*"/>
, не повезло.
Я читал везде людей, имеющих обратную проблему (слишком много места), но я не нашел той же проблемы, что и у меня.
Я думаю, вы уже догадались, что я делаю это преобразование в Visual studio (пространство имен msxsl).
У вас есть ' ', поэтому я удивлен, что ваш результат не с отступом. Как выполнить преобразование непосредственно в Visual Studio? Или вы пишете код .NET, чтобы запустить его, например. C# или VB? В этом случае покажите нам код, который у вас есть, возможно, вы неправильно используете API-интерфейс XslCompiledTransform, чтобы убедиться, что директива 'xsl: output' имеет эффект. –
Да, я делаю это непосредственно в Visual Studio ('Debug -> Запуск XSLT (без) отладки'). Странные вещи состоят в том, что все элементы, которые не затрагиваются этим шаблоном, имеют отпечаток правильно. Я попытался поставить «indent» в false, он ничего не меняет – J4N
Если вы не показываете весь код, никто не может попытаться воспроизвести вашу проблему. –