日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何在XSLT里调用C#的代码

發布時間:2025/5/22 C# 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在XSLT里调用C#的代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有兩種方法:1)內嵌腳本, 2)使用擴展對象
使用內嵌腳本的方法,MSDN上已經有比較清楚的描述:?Script Blocks Using msxsl:script。但對擴展對象的描述好像并不清晰。其實擴展對象比內嵌更為強大。舉個例子,假設我們想知道自己所關心城市的天氣,我們用一個xml來描述:

<?xmlversion="1.0"encoding="utf-8"??> <china> <city>Shanghai</city> <city>Beijing</city> </china>???????

在這里我們想知道上海和北京兩地的天氣,并希望通過一個XSLT來轉換出如下結果:
<Report>

<Cityname="Shanghai">多云</City> <Cityname="Beijing">小雨</City> </Report>

天氣預報是通過調用一個web服務得到的。可以想象,單純的XSLT絕對沒辦法把這事簡單搞定。不過通過擴展對象,這件事情就變得異常簡單了。
首先我們創建一個擴展對象:

public?class?WeatherReport { public?string?GetReport(string?city) { return?"weather of "?+ city; } }


這個對象支持一個方法:根據城市名稱返回其天氣。為簡單起見,我們返回"weather of"加城市名字。在具體的應用中可以去調用具體的web服務。
下面這段代碼實現將結果輸出到屏幕上:

private?static?void?ShowWeather(string?xmlFile,?string?xsltFile) { XmlDocument?xmldoc =?new?XmlDocument(); xmldoc.Load(xmlFile); XmlDocument?xsltDoc =?new?XmlDocument(); xsltDoc.Load(xsltFile); XslCompiledTransform?xslt =?new?XslCompiledTransform(); xslt.Load(xsltDoc.CreateNavigator()); XmlTextWriter?writer =?new?XmlTextWriter(Console.Out); writer.Formatting =?Formatting.Indented; XsltArgumentList?xsltArgList =?new?XsltArgumentList(); xsltArgList.AddExtensionObject("urn:my.xslt.extension",?new?WeatherReport()); xslt.Transform(xmldoc, xsltArgList, writer); writer.Close(); }


大部分代碼和其他的都相同,不同的地方就是,需要將擴展對象作為參數傳到你的XSLT里:
??????????? xsltArgList.AddExtensionObject("urn:my.xslt.extension",?new?WeatherReport());

下面是XSLT文本:

<?xmlversion="1.0"encoding="UTF-8"??> <xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:code="urn:my.xslt.extension" > <xsl:outputmethod="xml"indent?="yes"/> <xsl:templatematch="china"> <xsl:elementname="Report"> <xsl:apply-templatesselect="city"?/> </xsl:element> </xsl:template> <xsl:templatematch="china/city"> <xsl:elementname="City"> <xsl:attributename="name"> <xsl:value-ofselect="."/> </xsl:attribute> <xsl:value-ofselect="code:GetReport(.)"/> </xsl:element> </xsl:template> </xsl:stylesheet>


其他都一樣,不同的是,我們需要定義擴展對象的命名空間
????????????????xmlns:code?="urn:my.xslt.extension"
這個就是我們在代碼AddExtensionObject傳進去的命名空間
另外就是調用:
??????????????????????? <xsl:value-ofselect?="code:GetReport(.)"/>
其實擴展對象的威力遠遠不止這些,你還可以接受一個XPathNodeIterator來處理節點樹,甚至返回一個新的XPathNodeIterator讓XLST做處理。

出處:http://blog.csdn.net/hiaspx/article/details/3620338

轉載于:https://www.cnblogs.com/mq0036/archive/2012/07/18/2597672.html

總結

以上是生活随笔為你收集整理的如何在XSLT里调用C#的代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。