XSLT几种应用场景
来源:互联网 发布:淘宝美工培训机构杭州 编辑:程序博客网 时间:2024/05/22 01:35
XSLT可以针对XML数据文件进行转换(Transfom),它的作用相当于就是样式表(css)之于HTML文件。
本文假设,我们有一个XML数据文件
xml version="1.0" encoding="utf-8" ?><Order xmlns:d="http://www.xizhang.com"> <d:OrderID>10248d:OrderID> <d:OrderDate>2009-1-1d:OrderDate>Order>
同时,我们假设有一个编写好的XSLT文件.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:d="http://www.xizhang.com"> <xsl:output method="html"/> <xsl:template match="/Order"> <html> <body> <table> <tr> <th>订单编号th> <th>订购日期th> tr> <tr> <td> <xsl:value-of select="d:OrderID"/> td> <td> <xsl:value-of select="d:OrderDate"/> td> tr> table> body> html> xsl:template>xsl:stylesheet>.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
我下面总结几种常见的使用场景
1. 第一种场景:直接在XML文件中定义样式表链接。这样这个XML文件就可以直接被XML解析器进行展现,例如在浏览器中
xml version="1.0" encoding="utf-8" ?>xml-stylesheet type="text/xsl" href="XSLTFile1.xslt"?><Order xmlns:d="http://www.xizhang.com"> <d:OrderID>10248d:OrderID> <d:OrderDate>2009-1-1d:OrderDate>Order>
这种情况需要修改数据文件本身,所以有一些局限性。
2. 我们还可以在ASPX页面中通过xml控件来执行这个转换
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default"%>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>title>head><body> <form id="form1" runat="server"> <div> <asp:Xml DocumentSource="~/Data.xml" TransformSource="~/XSLTFile1.xslt" ID="xml1" runat="server" Visible="true">asp:Xml> div> form>body>html>.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
这种做法,可以直接将转换得到的输出显示在页面上,而且无需编写任何代码。但因为只有两个属性设置,所以灵活性也相对有限
3. 我们还可以利用代码的方式对其进行转换。例如下面的代码,我们通过样式表,对XML文档进行转换,并将结果保存为另外一个文件
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default"%>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>title>head><body> <form id="form1" runat="server"> <div> <asp:Xml DocumentSource="~/Data.xml" TransformSource="~/XSLTFile1.xslt" ID="xml1" runat="server" Visible="true">asp:Xml> <br /> <asp:Button ID="btgenerateFile" runat="server" Text="产生文档" OnClick="GenerateFile" /> div> form>body>html>.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
在代码文件中,添加如下代码
using System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Xml.Xsl;namespace WebApplication1{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GenerateFile(object sender, EventArgs e) { string dataFile = Server.MapPath("Data.xml"); string styleFile = Server.MapPath("XSLTFile1.xslt"); string outputFile=Server.MapPath("output.html"); XslTransform tran = new XslTransform(); tran.Load(styleFile); tran.Transform(dataFile, outputFile); } }}.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
4. 我们还可以将转换的结果保存为内存中的字符串(也就是说不一定要保存为文件),作为后续操作的基础。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default"%>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>title>head><body> <form id="form1" runat="server"> <div> <asp:Xml DocumentSource="~/Data.xml" TransformSource="~/XSLTFile1.xslt" ID="xml1" runat="server" Visible="true">asp:Xml> <br /> <asp:Button ID="btgenerateFile" runat="server" Text="产生文档" OnClick="GenerateFile" /> <br /> <br /> <asp:Button ID="btgenerateString" runat="server" Text="产生字符串" OnClick="GenerateString" /> div> form>body>html>
代码文件
protected void GenerateString(object sender, EventArgs e) { //这个方法是直接将转换的结果保存为一个字符串 string dataFile = Server.MapPath("Data.xml"); string styleFile = Server.MapPath("XSLTFile1.xslt"); StringBuilder output = new StringBuilder(); XslTransform tran = new XslTransform(); tran.Load(styleFile); XmlDocument doc = new XmlDocument(); doc.Load(dataFile); tran.Transform(doc.CreateNavigator(), null, new StringWriter(output)); Response.Write(HttpUtility.HtmlEncode(output.ToString())); }
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
5. 我们还可以使用新增的XslCompiledTransform进行更加好的转换。支持对xslt的编译
protected void GenerateFile(object sender, EventArgs e) { string dataFile = Server.MapPath("Data.xml"); string styleFile = Server.MapPath("XSLTFile1.xslt"); string outputFile=Server.MapPath("output.html"); //XslTransform tran = new XslTransform(); XslCompiledTransform tran = new XslCompiledTransform(); tran.Load(styleFile); tran.Transform(dataFile, outputFile); }.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
关于如何编译xslt文件,请参考http://www.cnblogs.com/chenxizhang/archive/2009/05/24/1488492.html
- XSLT几种应用场景
- Redis 几种应用场景
- RabbitMQ的几种应用场景
- RabbitMQ的几种应用场景
- RabbitMQ的几种应用场景
- RabbitMQ的几种应用场景
- Oracle Text 全文索引 几种典型应用场景
- android 读取图片的几种应用场景
- Android Context上下文(几种的对比,应用场景)
- 【Android】Handler的几种应用场景总结
- php常用几种设计模式的应用场景
- Mysql的几种分布方式及应用场景
- learning opencv 2 几种滤波的应用场景
- 几种oom场景
- 几种RMAN恢复场景
- js判断数据类型的几种方法及应用场景分析
- 几种距离计算公式在数据挖掘中的应用场景分析
- XSLT应用与输出
- 伤心的程序员
- shell学习笔记1-基本shell命令
- ubuntu 解决部分乱码
- 基于arm架构的pppoe的终极移植笔记
- 基于JavaWeb项目开发的深入调研
- XSLT几种应用场景
- 使用ASP.NET开发WAP强制输出WML
- 入职前是自上向下,入职后自下向上,经典中的经典。
- HTTP请求:GET与POST方法的区别
- 让你受用一生的做人做事36字诀
- 面试的一个思考
- .NET开发中的事务处理大比拼
- 婚前婚后
- nice