xslt轉換xml

來源:互聯網
上載者:User

    關於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()方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.