2010-01-27 112 views
6

我有返回到我的視圖的xml數據。我把它放在textarea中,但是這顯示它沒有格式化。我如何格式化xml以在我的視圖中顯示?如何顯示格式化的XML

我只會在頁面的一部分顯示xml,所以我不能讓IE顯示它。我希望它是標準的XML縮進格式。

+4

你怎麼想它格式化? – 2010-01-27 17:46:53

+0

我希望縮進標籤。 – Joe 2010-01-27 18:30:39

+1

在這種情況下,請參閱我的或John Saunders的答案。 – 2010-01-27 19:26:00

回答

6

只需將XML加載到XElement中,然後使用XElement.ToString()

+0

+1簡單 – Joe 2010-01-27 19:41:03

+1

儘管沒有縮進,OP要求 – Grubl3r 2014-09-26 09:39:22

4

您可以使用XSLT將您的XML轉換爲XHTML,然後顯示它。

2

如何取代「<」與& lt;然後填入< pre>塊。用戶將無法編輯它,但無論如何你肯定擁有比textarea更好的工具,對嗎?

1

您可以使用java腳本代碼着色器。至於格式化,xml writer(據我所知)可以輸出結構良好的文檔,默認情況下它可以關閉以減輕重量。

5

如果通過「格式化」,你的意思是縮進,那麼你可以將其加載到XmlDocument,並將其寫入與XmlWriterSettingsIndent設置爲true初始化的XmlWriter

private string FormatXml(string input) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(input); 

    using (StringWriter buffer = new StringWriter()) 
    { 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 

     using (XmlWriter writer = XmlWriter.Create(buffer, settings)) 
     { 
      doc.WriteTo(writer); 

      writer.Flush(); 
     } 

     buffer.Flush(); 

     return buffer.ToString(); 
    } 
} 
+0

-1:XmlTextWriter從.NET 2.0開始被棄用。你也缺少'使用'塊。 – 2010-01-27 18:09:07

+1

從.NET 4.0開始,絕對不會棄用XmlTextWriter。簡單*建議*使用'XmlWriter.Create'來代替XmlTextWriter ctor。我更新了代碼來處理資源,儘管它只是一個樣本。 – 2010-01-27 19:21:52

+0

如果使用「@user」,它會通知用戶註釋。我已經刪除了downvote。 「只有一個示例」代碼被複制並粘貼。我也經常看到有人問,「你爲什麼這樣寫」,回答,「因爲樣本」。 – 2010-02-08 01:43:26

1

如果您正在尋找一個簡單的Xml結構默認IE視圖(與可摺疊節點等)。

IE變換在這裏:res://msxml.dll/DEFAULTSS.xsl

xslt版本可在線獲得,如this。我在沒有更人性化轉換的地方使用它,但仍希望以格式化方式查看Xml。

3

這是我喜歡做的事:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" standalone="yes" omit-xml-declaration="yes" 
    encoding="utf-8" media-type="text/html" indent="no" cdata-section-elements="" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/> 

<xsl:template match="/"> 
    <html><head><title>XML Data</title> 
    <style type="text/css">th {text-align:right}</style></head> 
    <body><table><xsl:apply-templates/></table></body></html> 
</xsl:template> 

<xsl:template match="*[text() and *]"> 
    <xsl:apply-templates select="@*"/> 
    <tr><th><xsl:value-of select="name()"/></th> 
     <td> 
      <xsl:for-each select="*|text()"> 
       <xsl:choose> 
        <xsl:when test="name()"> 
         <xsl:apply-templates mode="inline" select="."/> 
        </xsl:when> 
        <xsl:otherwise> 
         <xsl:value-of select="."/> 
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:for-each> 
     </td> 
    </tr> 
</xsl:template> 

<xsl:template match="*" mode="inline"> 
    <xsl:text> [ </xsl:text> 
    <strong><xsl:value-of select="name()"/></strong> 
    <xsl:if test="@*"> 
     <xsl:text> (</xsl:text> 
     <xsl:for-each select="@*"><xsl:if test="position() &gt; 1" xml:space="preserve"> </xsl:if> 
      <em><xsl:value-of select="name()"/></em> = <xsl:value-of select="."/> 
     </xsl:for-each> 
     <xsl:text>)</xsl:text> 
    </xsl:if> 
    <xsl:text>: </xsl:text> 
    <xsl:apply-templates mode="inline"/> 
    <xsl:text> ] </xsl:text> 
</xsl:template> 

<xsl:template match="*[text() and not(*)]"> 
    <xsl:apply-templates select="@*"/> 
    <tr><th><xsl:value-of select="name()"/></th> 
     <td><xsl:apply-templates/></td></tr> 
</xsl:template> 

<xsl:template match="*[(* or @*) and not(text())]"> 
    <tr><td colspan="2"><fieldset><legend><xsl:value-of select="name()"/></legend> 
     <table><xsl:apply-templates select="@*"/><xsl:apply-templates/></table></fieldset></td></tr> 
</xsl:template> 

<xsl:template match="*[not(*|@*|text())]"> 
    <tr><td colspan="2"><xsl:value-of select="name()"/></td></tr> 
</xsl:template> 

<xsl:template match="@*"> 
    <tr><th><em><xsl:value-of select="name()"/></em></th> 
     <td><xsl:value-of select="."/></td></tr> 
</xsl:template> 

</xsl:stylesheet> 
3

宣佈自己的asp:Literal一個<pre>元素中。

<pre><asp:Literal ID="foo" runat="server" /></pre> 

指定XML字符串字面:

foo.Text = CreatedIndentedXmlString("<foo><bar>6</bar></foo>"); 

public string CreatedIndentedXmlString(string inXml) 
{ 
    if (inXml.Length == 0) return ""; 
    XElement x = XElement.Parse(inXml); 
    return Server.HtmlEncode(x.ToString()); 
}