Microsoft .NET 框架不支持 XML 1.1,这是真的,但它有自己的(不可移植的)方式来使用 XML 1.0 文档中的控制字符,也就是说,如果您将 CheckCharacters 设置为 false on,您可以将其作为数字字符引用你的 XmlReaderSettings/XmlWriterSettings。
这是一个示例样式表和一些使用 .NET 3.5 测试的不会引发非法字符异常的 .NET 代码:
<?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();
}