XML 数据里面包含了 <br /> 这个 html 元素, 但是用 C# 进行 XsltTransform 死活就是输出不了 <br />。奇怪的是IE 直接浏览 XML 文件和 Javascript 调用 MSXML 得到的转换结果却是正常的 - <br /> 可以正常的显示出来。文件是这样写的(部分)
XML:
<
root
>
< a > <![CDATA[ AAAAAA <br /> BBBBBB<br />CCCCCC ]]> </ a >
</ root >
< a > <![CDATA[ AAAAAA <br /> BBBBBB<br />CCCCCC ]]> </ a >
</ root >
<?xml:namespace prefix = o />
<
xsl:value-of
disable-output-escaping
="yes"
select
="/root/a"
/>
Javascript
var
xml
=
new
ActiveXObject(
"
Msxml2.DOMDocument.4.0
"
);
xml.load( " a.xml " );
var xslt = new ActiveXObject( " Msxml2.DOMDocument.4.0 " );
xslt.load( " a.xslt " );
document.write(xml.transformNode(xslt));
xml.load( " a.xml " );
var xslt = new ActiveXObject( " Msxml2.DOMDocument.4.0 " );
xslt.load( " a.xslt " );
document.write(xml.transformNode(xslt));
C#
XslTransform xslt
=
new
XslTransform();
XmlDocument xml = new XmlDocument();
xslt.Load( " a.xslt " );
xml.Load(( " a.xml " ));
using (XmlTextWriter writer = new XmlTextWriter( " a.doc " , Encoding.Default))
{
xslt.Transform(xml, null, writer, null);
writer.Close();
}
XmlDocument xml = new XmlDocument();
xslt.Load( " a.xslt " );
xml.Load(( " a.xml " ));
using (XmlTextWriter writer = new XmlTextWriter( " a.doc " , Encoding.Default))
{
xslt.Transform(xml, null, writer, null);
writer.Close();
}
就是上面的这些代码,用浏览器直接看 xml 文件和 javascript 都是正常的输出的结果,就像事先设想的那样:
AAAAAA
BBBBBB
CCCCCC
BBBBBB
CCCCCC
但是 C# 那个版本的就是输出不了 <br />, 结果是这样的:
AAAAAABBBBBBCCCCCC
Google 半天找到原来是这样样子的 XmlWriter XmlReader 将忽略 XSLT 中的 disable-output-escaping 这个选项(详情参考 http://www.dotnet247.com/247reference/msgs/28/142194.aspx)。将上述 C# 代码中的 XmlTextWriter 换成 FileStream 一切搞定。
System.IO.Stream strmTemp
=
new
System.IO.FileStream(
"
a.doc
"
, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite);