Microsoft .NET Framework не поддерживает XML 1.1, это правда, но у него есть свой собственный (не переносимый) способ использования управляющих символов в документах XML 1.0, а именно, вы можете иметь & # x10; в качестве числовой ссылки на символ, если вы установите для CheckCharacters значение false в своих XmlReaderSettings / XmlWriterSettings.
Вот пример таблицы стилей и некоторый код .NET, протестированный с .NET 3.5, который не вызывает исключение недопустимых символов:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text></xsl:text>
</xsl:template>
</xsl:stylesheet>
XmlReaderSettings xrs = new XmlReaderSettings();
xrs.CheckCharacters = false;
XslCompiledTransform proc = new XslCompiledTransform();
using (XmlReader xr = XmlReader.Create(@"sheet.xslt", xrs))
{
proc.Load(xr);
}
using (XmlReader xr = XmlReader.Create(new StringReader("<foo/>")))
{
XmlWriterSettings xws = proc.OutputSettings.Clone();
xws.CheckCharacters = false;
using (XmlWriter xw = XmlWriter.Create(@"result.txt", xws))
{
proc.Transform(xr, null, xw);
xw.Close();
}
xr.Close();
}