.net使用Xslt转换Xml
在很多开发中,经常需要使用Xslt解析XML数据,生成html,Doc,或者Text,按照本人的代码经验,总结一下的文字。
都是一个思路,首先基本上是先创建两个XmlReader对象,然后读取,然后使用XslCompiledTransform分析。.NET的表现非常明显。Asp处理的时候比较简单,判断的比较少,.NET的还会判断dtd等设置。
(.NET使用Xlst解析XML)
如果你的Xlt文件不包含诸如!ENTITY这种包含节点,就直接使用XslCompiledTransform(System.Xml.Xsl命名空间)类解析即可。
使用.NET 使用Xsl解析Xml文件
public static string InvokeXmlAndXsl(string xmlfile, string xslfile){
try{
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(xslfile);
System.Text.StringBuilder SB = new System.Text.StringBuilder();
transform.Transform(xmlfile,null,new System.IO.StringWriter(SB));
return SB.ToString();
}catch(Exception e){
return e.Message;
}
}
如果你的Xslt文件比较复杂,xml文件或者xsl文件包含文件,且无明确的dtd文件的话,就必须首先创建两个XmlReader对象,然后设置settings.ProhibitDtd = false;,这样就可以分析了:
考虑到加载的Xml可能是三种情况:文件,字符串,流,下面多态一下。
public enum XmlType{
File=1,String,Stream
}
这三种情况写成枚举。
具体的代码(你可以包含到Tpl.XmlAnalyze类下面,如范例使用):
public string InvokeXmlAndXsl(Object xmlfile, string xslfile){
return InvokeXmlAndXsl(xmlfile,xslfile,XmlType.File);
}
public string InvokeXmlAndXsl(Object xmlfile, string xslfile,XmlType XmlTypeP){
return this.InvokeXmlAndXsl(xmlfile,xslfile,XmlTypeP,null);
}
public string InvokeXmlAndXsl(Object xmlfile, string xslfile,XmlType XmlTypeP,XsltArgumentList Args){
XmlReader Xr=null,XmlReadLock=null;
try{
XslCompiledTransform transform = new XslCompiledTransform();
XmlReaderSettings settings =new XmlReaderSettings();
settings.ProhibitDtd = false;
transform.Load(Xr=XmlReader.Create(xslfile, settings));
System.Text.StringBuilder SB = new System.Text.StringBuilder();
if(XmlTypeP==XmlType.File){
transform.Transform(XmlReadLock=XmlReader.Create((string)xmlfile, settings),Args,new System.IO.StringWriter(SB));
}else if(XmlTypeP==XmlType.String){
XmlDocument XD= new XmlDocument();
XD.LoadXml((string)xmlfile);
transform.Transform(XD,Args,new System.IO.StringWriter(SB));
}else if(XmlTypeP==XmlType.Stream){
transform.Transform(new XPathDocument((Stream)xmlfile),Args,new System.IO.StringWriter(SB));
}
return SB.ToString();
}catch(Exception e){
return e.Message;
}finally{
if(null!=Xr)Xr.Close();
if(null!=XmlReadLock)XmlReadLock.Close();
}
}
使用的范例:
Tpl.XmlAnalyze Xa= new Tpl.XmlAnalyze();
this.Controls.Add(
new LiteralControl(
Xa.InvokeXmlAndXsl(
App.Settings.DefaultPageXml,
App.Settings.DefaultPageXsl,
Tpl.XmlAnalyze.XmlType.File)
));
第一种情况的例子就不写了。其他情况类似。
From:htto://www.5do8.com
from:asp学习网/title:.net使用Xslt转换Xml/ time:2007-10-11 1:00:57本文主题Xslt