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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何将ListT转换相应的Html(xsl动态转换)(二)

發布時間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何将ListT转换相应的Html(xsl动态转换)(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言

緊跟著上一篇隨筆,本文主要涉及到如何將xml與xsl動態轉換成html,這個才是最關鍵的地方,所有的內容都是圍繞這個主題來進行開展的。根據指定的xsl樣式將List<T>轉換相應的Html,相關的隨筆如下:

(一)、將List<T>轉換成DataTable

(二)、將Xml與Xsl動態轉換成Html

(三)、設置以及控制Xsl的內容樣式。

?

二、XslTransform的具體實現

XslTransform主要的職責為:將xml與xsl動態轉換成html。其中,XslCompiledTransform?提供了很多方法可以進行相關的轉換,但使用起來并不是十分方便,因此必須在該基礎上來對目前的類進行相關封裝以及提取。具體的代碼如下:

?1?????public?class?XslTransform?:?IDisposable
?2?????{
?3?????????public?StringWriter?StringWriter
?4?????????{
?5?????????????get;
?6?????????????private?set;
?7?????????}
?8?
?9?????????public?StringReader?XmlStringReader
10?????????{
11?????????????get;
12?????????????private?set;
13?????????}
14?
15?????????public?StringReader?XslStringReader
16?????????{
17?????????????get;
18?????????????private?set;
19?????????}
20?
21?????????public?XslTransform()
22?????????{
23?????????????this.StringWriter?=?new?StringWriter();
24?????????}
25?
26?????????public?string?Transfer(string?xmlText,?string?xslText)
27?????????{
28?????????????if?(string.IsNullOrWhiteSpace(xmlText)
29?????????????????||?string.IsNullOrWhiteSpace(xslText))
30?????????????{
31?????????????????return?string.Empty;
32?????????????}
33?????????????this.XmlStringReader?=?new?StringReader(xmlText);
34?????????????this.XslStringReader?=?new?StringReader(xslText);
35?
36?????????????return?TransferXmlAndXslToHtml();
37?????????}
38?
39?????????private?string?TransferXmlAndXslToHtml()
40?????????{
41?????????????try
42?????????????{
43?????????????????using?(XmlTextWriter?writer?=?new?XmlTextWriter(this.StringWriter))
44?????????????????{
45?????????????????????return?ToHtml(writer);
46?????????????????}
47?????????????}
48?????????????catch
49?????????????{
50?????????????????return?string.Empty;
51?????????????}
52?????????}
53?
54?????????private?string?ToHtml(XmlTextWriter?writer)
55?????????{
56?????????????XslCompiledTransform?xslTransform?=?new?XslCompiledTransform();
57?????????????xslTransform.Load(XmlReader.Create(this.XslStringReader));
58?????????????xslTransform.Transform(XmlReader.Create(this.XmlStringReader),?writer);
59?????????????
60?????????????return?this.StringWriter.ToString();
61?????????}
62?
63?????????#region?IDisposable?成員
64?
65?????????public?void?Dispose()
66?????????{
67?????????????this.Dispose(true);
68?????????????GC.SuppressFinalize(this);
69?????????}
70?
71?????????private?void?Dispose(bool?disposing)?
72?????????{
73?????????????if?(this.StringWriter?!=?null)
74?????????????{
75?????????????????this.StringWriter.Dispose();
76?????????????}
77?????????????if?(this.XslStringReader?!=?null)
78?????????????{
79?????????????????this.XslStringReader.Dispose();
80?????????????}
81?????????????if?(this.XmlStringReader?!=?null)
82?????????????{
83?????????????????this.XmlStringReader.Dispose();
84?????????????}
85?????????}
86?
87?????????#endregion
88?????}

?

?XslTransform?類主要的方法為54-61行的代碼,如下所示:

54?????????private?string?ToHtml(XmlTextWriter?writer)
55?????????{
56?????????????XslCompiledTransform?xslTransform?=?new?XslCompiledTransform();
57?????????????xslTransform.Load(XmlReader.Create(this.XslStringReader));
58?????????????xslTransform.Transform(XmlReader.Create(this.XmlStringReader),?writer);
59?????????????
60?????????????return?this.StringWriter.ToString();
61?????????}


第57行加載XSL的樣式文本,58行在原有基礎上將XML轉換成XmlTextWriter對象。其中XmlTextWriter在初始化時,StringWriter對象作為參數傳遞進去,如以下的43行代碼:

43?????????????????using?(XmlTextWriter?writer?=?new?XmlTextWriter(this.StringWriter))

因此直接返回this.StringWriter.ToString();就獲取到了我們所需的Html了。

?

其次,XslTransform?類還有一個注意的要點:實現IDisposable接口主要是將用到的資源及時釋放掉,避免造成其他影響。


三、Xsl文件的設置以及添加到資源文件中

?(1)創建MapperInfoXslContent.xslt樣式文件,內容如下(目前使用最簡單的,不做任何處理的樣式文件):

View Code <?xml?version="1.0"?encoding="utf-8"?>
<xsl:stylesheet?version="1.0"?xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
??
<xsl:template?match="/">?
????
<html>
??????
<head>
????????
<title>demo</title>
??????
</head>
??????
<body>
????????
<table>
??????????
<tr>
????????????
<td>
??????????????
<table?border="1px"?bordercolor="#000000"?cellspacing="0px"?style="border-collapse:collapse">
????????????????
<tr?bgcolor="#9acd32">
??????????????????
<th?width="80">Name</th>
??????????????????
<th?width="80">Value</th>
??????????????????
<th?width="80">Percent</th>
??????????????????
<th?width="230">CreatedTime</th>
??????????????????
<th?width="60">IsActive</th>
??????????????????
<th?width="190">TargerUrl</th>
????????????????
</tr>
????????????????
<xsl:for-each?select="DataSet/MapperInfo">
??????????????????
<tr>
????????????????????
<td?bgcolor="#ff00ff"?width="80">
??????????????????????
<xsl:value-of?select="Name"/>
????????????????????
</td>
????????????????????
<td?width="80">
??????????????????????
<xsl:value-of?select="Value"/>
????????????????????
</td>
????????????????????
<td?bgcolor="#ff00ff"?width="80">
??????????????????????
<xsl:value-of?select="Percent"/>
????????????????????
</td>
????????????????????
<td?width="230">
??????????????????????
<xsl:value-of?select="CreatedTime"/>
????????????????????
</td>
????????????????????
<td?bgcolor="#ff00ff"?width="60">
??????????????????????
<xsl:value-of?select="IsActive"/>
????????????????????
</td>
????????????????????
<td?width="190">
??????????????????????
<xsl:value-of?select="TargetUrl"/>
????????????????????
</td>
??????????????????
</tr>
????????????????
</xsl:for-each>
??????????????
</table>
????????????
</td>
??????????
</tr>
????????
</table>
??????
</body>
????
</html>
??
</xsl:template>
</xsl:stylesheet>

?

?

(2)然后再創建XslResource.resx資源文件,將MapperInfoXslContent.xslt樣式文件添加到XslResource.resx資源文件中,如下圖所示:

?

四、轉換后的效果?

經過轉換后得到的Html顯示效果如下(測試過程中可以以HTML格式來查看字符串):

?

五、相關的單元測試

?示例的單元測試代碼如下(僅做了一些最基礎的測試,驗證內容是否存在):

View Code ??????? [TestMethod()]
????????
public?void?TransferTest()
????????{
????????????
string?xmlText?=?GetXmlText();
????????????
string?xslText?=?XslResource.MapperInfoXslContent;
????????????
string?htmlContent?=?string.Empty;
????????????
using?(XslTransform?xslTransform?=?new?XslTransform())
????????????{
????????????????htmlContent?
=?xslTransform.Transfer(xmlText,?xslText);
????????????}

????????????Assert.IsTrue(
!string.IsNullOrWhiteSpace(htmlContent));
????????????Assert.IsTrue(htmlContent.Contains(
"true"));
????????????Assert.IsTrue(htmlContent.Contains(
"false"));
????????????
????????????
for?(int?index?=?0;?index?<?3;?index++)
????????????{
????????????????Assert.IsTrue(htmlContent.Contains(
????????????????????
string.Concat("MapperInfoIndex",?index.ToString())));
????????????????Assert.IsTrue(htmlContent.Contains(
????????????????????
string.Format(@"www.codeplex.com?Id={0}",?index)));
????????????????Assert.IsTrue(htmlContent.Contains(index.ToString()));
????????????}??????????
????????}

????????
private?string?GetXmlText()
????????{
????????????List
<MapperInfo>?entities?=?CreateMapperInfos(3);
????????????DataTable?dataTable?
=?EntityMapper.ToDataTable<MapperInfo>(entities);
????????????DataSet?dataSet?
=?new?DataSet("DataSet");
????????????dataSet.Tables.Add(dataTable);

????????????
return?dataSet.GetXml();
????????}

????????
private?List<MapperInfo>?CreateMapperInfos(int?count)
????????{
????????????List
<MapperInfo>?entities?=?new?List<MapperInfo>();
????????????
for?(int?index?=?0;?index?<?count;?index++)
????????????{
????????????????entities.Add(
new?MapperInfo()
????????????????{
????????????????????Name?
=?string.Concat("MapperInfoIndex",?index.ToString()),
????????????????????IsActive?
=?(index?%?2?==?0???true?:?false),
????????????????????CreatedTime?
=?DateTime.Now,
????????????????????Value?
=?index,
????????????????????Percent?
=?GetPercent(index),
????????????????????TargetUrl?
=?string.Format(@"www.codeplex.com?Id={0}",?index)
????????????????});
????????????}

????????????
return?entities;
????????}

????????
private?decimal??GetPercent(int?index)
????????{
????????????
if?(index?%?2?==?0)
????????????{
????????????????
return?index;
????????????}

????????????
return?null;
????????}

?

六、總結

上面涉及的僅僅是其中的一種,代碼應該是比較精簡的。還有另外一種采用XPathNavigator的,也就是笛子說的:“如果使用 XmlWriter 或 XmlDocument,則可以避開這個問題。另外,XslCompiledTransform.Transform 方法重載了幾個版本中,如果我沒記錯的話,最應優先使用的是xml數據源為 XPathNavigator 的版本。”。關于這種情況,可以通過XmlDocument來創建相關的XPathNavigator對象,即:XPathNavigator navigator = XmlDocument.DocumentElement.CreateNavigator(),這種版本的我也重寫了一份,但是好像沒有轉換成功,因此就采用這種模式了。下一篇主要涉及到XSL樣式的設計以及相關的函數、模板的應用。

轉載于:https://www.cnblogs.com/aaa6818162/archive/2011/05/27/2060134.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何将ListT转换相应的Html(xsl动态转换)(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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