xslt转换xml

    关于xslt转换xml的文章,我发现有一篇总结比较好的,请参考http://www.cnblogs.com/RicCC/archive/2006/12/20/Xml-Xslt-Transform.html

这里写的目的只是强调一些比较重点的地方。关于xslt转换xml,现在用的比较多的还是用.net类库来解决。我们看一下相应的命名空间及相关方法。实际上主要是XslCompiledTransform.Transform方法的调用。XslCompiledTransform.Transform重载的方法比较多,看一下先。

 

针对这些方法,根据需求可以用不同的写法去解决,原文作者总结的很好。

//VS2003
        XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath(
"a.xml"));
        XPathNavigator navgator 
= doc.CreateNavigator();
        StringWriter output 
= new StringWriter();
        XslTransform transform 
= new XslTransform();
        transform.Load(Server.MapPath(
"a.xslt"));
        transform.Transform(navgator, 
null, output);
        Response.Write(output.ToString());

 

 //VS2005,也可以象VS2003下面通过XmlDocument获取XPathNavigator对象的方式
        
//VS2005与2003不同之处在于2003下的XslTransform被XslCompiledTransform代替,这是2005下优化xsl性能的产物
        StringWriter output = new StringWriter();
        XslCompiledTransform transform 
= new XslCompiledTransform();
        transform.Load(Server.MapPath(
"a.xslt"));
        transform.Transform(Server.MapPath(
"a.xml"), null, output);
        Response.Write(output.ToString());

VS2005下面,也可以用另外的方法,即生成HTML的临时文件。注意,在调用transform.Transform()方法的时候,a.html文件并不存在,transform.Transform()方法会自动创建这个文件,将转换后的结果输出到这个文件中。

// VS2005
XslCompiledTransform transform  =   new  XslCompiledTransform();
transform.Load(Server.MapPath(
" a.xslt " ));
transform.Transform(Server.MapPath(
" a.xml " ), Server.MapPath( " a.html " ));
Response.WriteFile(Server.MapPath(
" a.html " ));

    另外值得注意的,上面使用StringWrite作为Transform方法的输出,输出结果的Encoding为UTF16,如果你一定要使输出结果的Encoding为UTF8,请使用下面的方式。这估计是StringWrite从Transform()方法接收到结果之后再转换成UTF16,或者是.Net实现Transform()方法时用StringWriter的Encoding属性覆盖了xsl:output节点的设置。

// VS2005
XslCompiledTransform transform  =   new  XslCompiledTransform();
transform.Load(Server.MapPath(
" a.xslt " ));
MemoryStream stream 
=   new  MemoryStream();
transform.Transform(Server.MapPath(
" a.xml " ),  null , stream);
StreamReader reader 
=   new  StreamReader(stream, System.Text.Encoding.UTF8);
Response.WriteFile(reader.ReadToEnd());

 

还有一种用的比较少的。
用MSXML COM对象解析。
        基于MSXML COM对象的方式,可以在所有的脚本语言、VB、.Net等使用,例如在客户端的JavaScript里面也可以创建MSXML COM对象,将xml转换成HTML。下面示例在.Net环境下使用这种方式。

using  MSXML2;
using  System.Xml;
public  partial  class  _Default : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        MSXML2.DOMDocument xmldoc 
=   new  DOMDocument();
        xmldoc.async 
=   false ;
        xmldoc.load(Server.MapPath(
" a.xml " ));
        MSXML2.DOMDocument xsldoc 
=   new  DOMDocument();
        xsldoc.async 
=   false ;
        xsldoc.load(Server.MapPath(
" a.xslt " ));
        Response.Write(xmldoc.transformNode(xsldoc));
    }
}

 

强调一点的是:

     如果说你的xml文档是实时生成的,或直接从数据库里面读出来的。应该用到这里面的方法。

XslCompiledTransform.Transform (IXPathNavigable, XsltArgumentList, Stream) 使用 IXPathNavigable 对象指定的输入文档执行转换,然后将结果输出到流。XsltArgumentList 提供附加的运行时参数。
XslCompiledTransform.Transform (IXPathNavigable, XsltArgumentList, TextWriter) 使用 IXPathNavigable 对象指定的输入文档执行转换,然后将结果输出到 。XsltArgumentList 提供附加的运行时参数。
XslCompiledTransform.Transform (IXPathNavigable, XsltArgumentList, XmlWriter) 使用 IXPathNavigable 对象指定的输入文档执行转换,然后将结果输出到 XmlWriterXsltArgumentList 提供附加的运行时参数。

 

可以参考一下下面的代码:

 

StringWriter output  =   new  StringWriter();
XslCompiledTransform transform 
=   new  XslCompiledTransform();
transform.Load(Server.MapPath(xsltPath));
transform.Transform(JobDocument.CreateNavigator(), 
null , output);
Literal2.Text 
=  output.ToString();

 

其中JobDocument是实时生成的,转换后然后输出到一个文本控件内。注意XmlDocument.CreateNavigator()方法。

转载于:https://www.cnblogs.com/jackhuclan/archive/2008/08/22/1273839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值