在ASP.NET页面上显示XML

Mus*_*usa 14 asp.net

我有一个包含使用LinqtoXML的XML文档的字符串

在asp.net页面上显示它的最佳方法是什么.

Cer*_*rus 17

我本来希望丹尼斯提到的方式(使用<asp:Xml>控件).但这需要使用XSL样式表来格式化XML.Xml控件不允许将HTML编码的字符串作为DocumentContent属性传递,并且不公开任何编码内容的方法.

正如我在对Dennis的帖子的评论中提到的,msxml.dll中包含的defaultss.xsl不公开(并且不符合XSL 1.0).但是,这里发布了一个公开转换的版本:http://www.dpawson.co.uk/xsl/sect2/microsoft.html#d7615e227.我测试了它并且它有效,虽然有点马车.

因此,我认为最简单的方法是使用<asp:Literal>控件将预编码的XML输出到页面.以下示例演示了此方法:


<%@ Page Language="C#" %>

<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Xml" %>

<script runat="server">
  protected void Page_Load(object sender, EventArgs e)
  {
    string theXML = Server.HtmlEncode(File.ReadAllText(Server.MapPath("~/XML/myxmlfile.xml")));
    lit1.Text = theXML;
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Untitled Page</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <pre>
        <asp:Literal ID="lit1" runat="server" />
      </pre>
    </div>
  </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这也会呈现换行符吗? (2认同)

Cod*_*nis 6

使用asp:Xml与其一起控制默认样式表TransformSource.这将使您看起来非常类似于在Internet Explorer中打开xml文件时所看到的与语法高亮和着色完全相似的内容.

我删除了扩展/折叠节点功能,因为我无法使其工作.这个文件是xsl 1.0,并且在没有错误的情况下工作得很好.

为了避免将来我的链接文件出现问题,以下是内容:

<!--
|
| XSLT REC Compliant Version of IE5 Default Stylesheet
|
| Original version by Jonathan Marsh (jmarsh@xxxxxxxxxxxxx)
| http://msdn.microsoft.com/xml/samples/defaultss/defaultss.xsl
|
| Conversion to XSLT 1.0 REC Syntax by Steve Muench (smuench@xxxxxxxxxx)
|
+-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" method="html"/>
<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="processing-instruction()">
    <DIV class="e">
        <SPAN class="b">
            <xsl:call-template name="entity-ref">
                <xsl:with-param name="name">nbsp</xsl:with-param>
            </xsl:call-template>
        </SPAN>
        <SPAN class="m">
            <xsl:text>&lt;?</xsl:text>
        </SPAN>
        <SPAN class="pi">
            <xsl:value-of select="name(.)"/>
            <xsl:value-of select="."/>
        </SPAN>
        <SPAN class="m">
            <xsl:text>?></xsl:text>
        </SPAN>
    </DIV>
</xsl:template>
<xsl:template match="processing-instruction('xml')">
    <DIV class="e">
        <SPAN class="b">
            <xsl:call-template name="entity-ref">
                <xsl:with-param name="name">nbsp</xsl:with-param>
            </xsl:call-template>
        </SPAN>
        <SPAN class="m">
            <xsl:text>&lt;?</xsl:text>
        </SPAN>
        <SPAN class="pi">
            <xsl:text>xml </xsl:text>
            <xsl:for-each select="@*">
                <xsl:value-of select="name(.)"/>
                <xsl:text>="</xsl:text>
                <xsl:value-of select="."/>
                <xsl:text>" </xsl:text>
            </xsl:for-each>
        </SPAN>
        <SPAN class="m">
            <xsl:text>?></xsl:text>
        </SPAN>
    </DIV>
</xsl:template>
<xsl:template match="@*">
    <SPAN>
        <xsl:attribute name="class"><xsl:if test="xsl:*/@*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
        <xsl:value-of select="name(.)"/>
    </SPAN>
    <SPAN class="m">="</SPAN>
    <B>
        <xsl:value-of select="."/>
    </B>
    <SPAN class="m">"</SPAN>
</xsl:template>
<xsl:template match="text()">
    <DIV class="e">
        <SPAN class="b"> </SPAN>
        <SPAN class="tx">
            <xsl:value-of select="."/>
        </SPAN>
    </DIV>
</xsl:template>
<xsl:template match="comment()">
    <DIV class="k">
        <SPAN>
            <!--<A STYLE="visibility:hidden" class="b" onclick="return false" onfocus="h()">-</A>-->
            <SPAN class="m">
                <xsl:text>&lt;!--</xsl:text>
            </SPAN>
        </SPAN>
        <SPAN class="ci" id="clean">
            <PRE>
                <xsl:value-of select="."/>
            </PRE>
        </SPAN>
        <SPAN class="b">
            <xsl:call-template name="entity-ref">
                <xsl:with-param name="name">nbsp</xsl:with-param>
            </xsl:call-template>
        </SPAN>
        <SPAN class="m">
            <xsl:text>--></xsl:text>
        </SPAN>
        <SCRIPT>f(clean);</SCRIPT>
    </DIV>
</xsl:template>
<xsl:template match="*">
    <DIV class="e">
        <DIV STYLE="margin-left:1em;text-indent:-2em">
            <SPAN class="b">
                <xsl:call-template name="entity-ref">
                    <xsl:with-param name="name">nbsp</xsl:with-param>
                </xsl:call-template>
            </SPAN>
            <SPAN class="m">&lt;</SPAN>
            <SPAN>
                <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                <xsl:value-of select="name(.)"/>
                <xsl:if test="@*">
                    <xsl:text> </xsl:text>
                </xsl:if>
            </SPAN>
            <xsl:apply-templates select="@*"/>
            <SPAN class="m">
                <xsl:text>/></xsl:text>
            </SPAN>
        </DIV>
    </DIV>
</xsl:template>
<xsl:template match="*[node()]">
    <DIV class="e">
        <DIV class="c">
            <!--<A class="b" href="#" onclick="return false" onfocus="h()">-</A>-->
            <SPAN class="m">&lt;</SPAN>
            <SPAN>
                <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                <xsl:value-of select="name(.)"/>
                <xsl:if test="@*">
                    <xsl:text> </xsl:text>
                </xsl:if>
            </SPAN>
            <xsl:apply-templates select="@*"/>
            <SPAN class="m">
                <xsl:text>></xsl:text>
            </SPAN>
        </DIV>
        <DIV>
            <xsl:apply-templates/>
            <DIV>
                <SPAN class="b">
                    <xsl:call-template name="entity-ref">
                        <xsl:with-param name="name">nbsp</xsl:with-param>
                    </xsl:call-template>
                </SPAN>
                <SPAN class="m">
                    <xsl:text>&lt;/</xsl:text>
                </SPAN>
                <SPAN>
                    <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                    <xsl:value-of select="name(.)"/>
                </SPAN>
                <SPAN class="m">
                    <xsl:text>></xsl:text>
                </SPAN>
            </DIV>
        </DIV>
    </DIV>
</xsl:template>
<xsl:template match="*[text() and not (comment() or processing-instruction())]">
    <DIV class="e">
        <DIV STYLE="margin-left:1em;text-indent:-2em">
            <SPAN class="b">
                <xsl:call-template name="entity-ref">
                    <xsl:with-param name="name">nbsp</xsl:with-param>
                </xsl:call-template>
            </SPAN>
            <SPAN class="m">
                <xsl:text>&lt;</xsl:text>
            </SPAN>
            <SPAN>
                <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                <xsl:value-of select="name(.)"/>
                <xsl:if test="@*">
                    <xsl:text> </xsl:text>
                </xsl:if>
            </SPAN>
            <xsl:apply-templates select="@*"/>
            <SPAN class="m">
                <xsl:text>></xsl:text>
            </SPAN>
            <SPAN class="tx">
                <xsl:value-of select="."/>
            </SPAN>
            <SPAN class="m">&lt;/</SPAN>
            <SPAN>
                <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                <xsl:value-of select="name(.)"/>
            </SPAN>
            <SPAN class="m">
                <xsl:text>></xsl:text>
            </SPAN>
        </DIV>
    </DIV>
</xsl:template>
<xsl:template match="*[*]" priority="20">
    <DIV class="e">
        <DIV STYLE="margin-left:1em;text-indent:-2em" class="c">
            <!--<A class="b" href="#" onclick="return false" onfocus="h()">-</A>-->
            <SPAN class="m">&lt;</SPAN>
            <SPAN>
                <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                <xsl:value-of select="name(.)"/>
                <xsl:if test="@*">
                    <xsl:text> </xsl:text>
                </xsl:if>
            </SPAN>
            <xsl:apply-templates select="@*"/>
            <SPAN class="m">
                <xsl:text>></xsl:text>
            </SPAN>
        </DIV>
        <DIV>
            <xsl:apply-templates/>
            <DIV>
                <SPAN class="b">
                    <xsl:call-template name="entity-ref">
                        <xsl:with-param name="name">nbsp</xsl:with-param>
                    </xsl:call-template>
                </SPAN>
                <SPAN class="m">
                    <xsl:text>&lt;/</xsl:text>
                </SPAN>
                <SPAN>
                    <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
                    <xsl:value-of select="name(.)"/>
                </SPAN>
                <SPAN class="m">
                    <xsl:text>></xsl:text>
                </SPAN>
            </DIV>
        </DIV>
    </DIV>
</xsl:template>
<xsl:template name="entity-ref">
    <xsl:param name="name"/>
    <xsl:text disable-output-escaping="yes">&amp;</xsl:text>
    <xsl:value-of select="$name"/>
    <xsl:text>;</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)