Это похоже на этот вопрос (хотя ваша проблема заключается в прямом обратном):
Использование xsl: if не включает закрывающий тег
Есть обсуждениездесь уловка, которая заставляет использовать более длинную форму закрытого элемента, которую вы, по-видимому, непреднамеренно используете здесь, в несколько иной форме.Я подозреваю, что ваша проблема в том, что вы просите xslt выводить текст напрямую.Сначала вывод в документ XML, а затем сериализация, которая должна решить вашу проблему.
Вот метод расширения, который я использовал для преобразования в XmlDocument
, а не в строку, которую затем вы можете просто прочитать .OuterXml
свойство, если вы хотите строковый эквивалент;поскольку XSLT не выполняет вывод в текст, он должен правильно обрабатывать закрытые теги.
public static XmlDocument Transform(this XmlDocument input, XslCompiledTransform xslt)
{
XmlDocument outDoc = new XmlDocument(input.CreateNavigator().NameTable);
using (XmlWriter xr = outDoc.CreateNavigator().AppendChild())
{
xslt.Transform(input, xr);
}
return outDoc;
}