0

这是我的 XML 文件。它使用来自 Nvarchar 记录的 sql 数据源作为字符串从 sql 数据表中获取。

<?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 控件是带有以下标记的列表视图中的文字

 <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 文件及其位置?

4

3 回答 3

1

当您只是告诉 ASP.NET 在文字文本中显示 XML 时,您并没有真正应用 XSLT。您必须单独应用 XSLT。从这个问题中,您可以了解如何转换 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。

于 2013-06-05T14:25:06.007 回答
0

您正在从数据库中读取 xml 作为 nvarchar 类型。这会将其视为字符串而不是 XMl。将字符串转换为 xml,它应该可以工作。

假设您将 xml 作为从变量“xmlString”中的数据库中获取的字符串。将其转换为 xml 文档。

      XmlDocument xdoc= new XmlDocument();
      xdoc.loadXml(xmlString);
于 2013-06-05T14:57:56.197 回答
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
于 2013-06-05T16:38:33.477 回答