这里简单记录一下使用 C# 对 xml 进行 xsl 转义的方法,可以分为两种方法,一种为客户端脚本转化和服务器端转换,下面分别看看这两种方法的具体实现方式:
首先,先看一下服务器端转义的方法,具体的转化代码如下:
strResultXmlContent = “ 待转化的xml 字符串 ” ;
// 获取字符串文件流
Stream stream = new MemoryStream (System.Text.Encoding .UTF8.GetBytes(strResultXmlContent));
// 获取XSL 解析文件,并生成公文列表
XslCompiledTransform xslt = new XslCompiledTransform ();
xslt.Load(_XslFilePath);
XPathDocument XDoc = new XPathDocument (stream);
TextWriter tw = new StringWriter ();
XmlWriter writer = XmlWriter .Create(tw);
xslt.Transform(XDoc, null , writer);
string XmlContent = tw.ToString();
writer.Close();
只进行转化,还不能算是完全成功,还必须考虑到在拼组xml 字符串的时候,可能出现的一些特殊字符,这其中有一些必须要处理的常见字符,我们必须使用不会引发转化异常的替代符号代替才成,而且在顺利通过了转化后,还必须要再替换回的一些字符:
// 替换"<" 到"<"
strResultXmlContent = strResultXmlContent.Replace("<" , "<" );
// 替换">" 到">"
strResultXmlContent = strResultXmlContent.Replace(">" , ">" );
// 替换"'" 到"///'"
strResultXmlContent = strResultXmlContent.Replace("'" , "///'" );
// 替换""" 到"///""
strResultXmlContent = strResultXmlContent.Replace(""" , "///"" );
// 替换"space;" 到" "
strResultXmlContent = strResultXmlContent.Replace("space;" , " " );
// 替换"&" 到"&"
strResultXmlContent = strResultXmlContent.Replace("&" , "&" );
其中的空格,使用了自定义的space; 这些都是完全可定义的,只要不影响xsl 转化即可。
下面再看一下客户端脚本的转化方式:
function TransmitXmlToHTML(strXml, strXsltPath){
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(strXml);
var xslspec=new ActiveXObject("Microsoft.XMLDOM");
xslspec.async=false;
xslspec.load(strXsltPath);
var strPageContent = xmlDoc.transformNode(xslspec);
var reg=new RegExp("< ","g");
strPageContent = strPageContent.replace(reg, "<");
reg=new RegExp("> ","g");
strPageContent = strPageContent.replace(reg, ">");
reg=new RegExp("'","g");
strPageContent = strPageContent.replace(reg, "///'");
reg=new RegExp("" ","g");
strPageContent = strPageContent.replace(reg, "///"");
reg=new RegExp("space;","g");
strPageContent = strPageContent.replace(reg, " ");
reg=new RegExp("& ","g");
strPageContent = strPageContent.replace(reg, "&");
return strPageContent;
}
对照来看,需要提供待转化xml 字符串和xsl 转义文件路径,同时再对特殊字符进行处理,否则就不能在页面中正常显示页面元素了。