2013-06-05 34 views
0

這是我的XML文件。它使用sql數據源從Nvarchar記錄中作爲字符串從sql數據表中獲取。我的代碼在asp.net頁面中顯示xml有什麼問題?

<?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> 

一個列表視圖中文字當我運行頁面時,我得到的輸出爲

enter image description here

有人可以幫我找出爲什麼XML不顯示爲HTML。我試圖改變字面Artistlabel模式,沒有運氣。甚至玩過XSL文件及其位置?

回答

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。

+0

謝謝,我用你的方法和它的工作。我已經提交了我的代碼作爲答案。 –

0

您正在從數據庫讀取xml作爲nvarchar類型。這將認爲它是一個字符串而不是XMl。將字符串轉換爲xml,它應該工作。

讓我們假設你有你的xml作爲字符串從變量「xmlString」中的數據庫中獲取。 將其轉換爲xml文檔。

 XmlDocument xdoc= new XmlDocument(); 
     xdoc.loadXml(xmlString); 
+0

你不需要使用這個我已經提交了我的代碼如下。謝謝 –

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