Ваш xsl-файл должен иметь:
- вывод html
- пропустить пространства имен для всех используемых в xslt
т.е.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="xsl msxsl">
<xsl:output method="html" indent="no" omit-xml-declaration="yes"/>
<!-- lots -->
</xsl:stylesheet>
И в идеале вы должны использовать перегрузки, которые принимают либо TextWriter
, либо Stream
(не XmlWriter
) - т.е. что-то вроде:
StringBuilder sb = new StringBuilder();
using (XmlReader reader = XmlReader.Create(source)
using (TextWriter writer = new StringWriter(sb))
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("Foo.xslt"); // in reality, you'd want to cache this
xslt.Transform(reader, options.XsltOptions, writer);
}
string html = sb.ToString();
В xslt, если вы действительно хотите автономный <
/ >
(т.е. вы хотите, чтобы он по какой-то причине искажался), вам нужно отключить экранирование выхода:
<xsl:text disable-output-escaping="yes">
Your malformed text here
</xsl:text>
Однако, как правило, правильно экранировать символы.