这是我的XML文件。它使用来自Nvarchar记录的sql datasource作为字符串从sql datatable获取。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Artist.xsl"?>
<artists>
<artist>
<name>KATY PERRY</name>
<id>1</id></artist>
<artist>
<name>SNOOP DOGG</name>
<id>2</id>
</artist>
</artists>
XSL样式表与aspx页面位于同一文件夹中,看起来像这样
<?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>
<body>
<h2>Artist</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="/artists/artist">
<tr>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="id"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我的aspx控件是listview中的文字,带有以下标记
<ItemTemplate>
<td runat="server" style="">
<asp:Literal ID="CoverartLabel" runat="server" Text='<%# Eval("Coverart") %>'></asp:Literal>
<a href="View.aspx/Album/<%# Eval("Id") %>"><%# Eval("Name") %></a>
<br />
<div>
<asp:Literal ID="ArtistsLabel" runat="server" Text='<%# Eval("Artists")%>' Mode="Encode"></asp:Literal>
<br />
</div>
<asp:Literal ID="SongsLabel" runat="server" Text='<%# Eval("Songs") %>'></asp:Literal>
<asp:Label ID="LikesLabel" runat="server" Text='<%# Eval("Likes") %>' />
<br />Comments:
<asp:Label ID="CommentsLabel" runat="server" Text='<%# Eval("Comments") %>' />
<br /></td>
</ItemTemplate>
当我运行页面时,我得到输出
有人可以帮我弄清楚为什么xml不会显示为html。我试过改变文字的Artistlabel模式没有运气。甚至玩过XSL文件及其位置?
答案 0 :(得分:1)
当您只是告诉ASP.NET在文字的文本中显示XML时,您并没有真正应用XSLT。您必须单独应用XSLT。从this question开始,您可以学习如何转换XML:
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);
请注意,示例是写入文件,但您要写入字符串。然后,您必须在每个绑定行的ListView.ItemDataBound事件中执行此操作,并生成所需的HTML。
答案 1 :(得分:0)
您正在从数据库中将xml读取为nvarchar类型。这会将其视为字符串而非XMl。将字符串转换为xml,它应该可以工作。
让我们假设您的xml是从变量“xmlString”中的数据库中获取的字符串。 将其转换为xml文档。
XmlDocument xdoc= new XmlDocument();
xdoc.loadXml(xmlString);
答案 2 :(得分:0)
知道了我在代码隐藏
中的Itemdatabound上使用了它 If e.Item.ItemType = ListViewItemType.DataItem Then
Dim m As String = File.ReadAllText(Server.MapPath("Artist.xsl"))
Dim kim As Literal = e.Item.FindControl("Artistslabel")
Dim output As String
Using srt As New System.IO.StringReader(m), sri As New IO.StringReader(kim.Text)
Using xrt As XmlReader = XmlReader.Create(srt), xri As XmlReader = XmlReader.Create(sri)
Dim xslt As New XslCompiledTransform()
xslt.Load(xrt)
Using sw As New System.IO.StringWriter(), xwo As XmlWriter = XmlWriter.Create(sw, xslt.OutputSettings)
xslt.Transform(xri, xwo)
output = sw.ToString
End Using
End Using
End Using
kim.Text = output
End If