第一次尝试在ASP.Net页面中显示XML内容。结果遇到了如下问题:

 


经过研究测试,发现是如下原因所导致:

如果页面中要在页面中显示XML内容,除了要在页面的代码文件(cs)中放置如下内容外:

        Response.Charset = "gb2312";         Response.ContentType = "text/xml";         Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 还应该特别注意页面的设计文件(aspx)中只能出现

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

所以在新建一个asp.net页面后,要把下面的部分:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">     <title>无标题页</title> </head> <body>     <form id="form1" runat="server">     <div>         </div>     </form> </body> </html>

删掉。否则就会出现上面提到的问题。因为在CS文件中指定的Response.ContentType="text/xml";会与标签<!DOCTYPE >相矛盾。

如果把标签<!DOCTYPE>中的内容删掉,再运行页面,又会出现错误“XML 文档只能有一个顶层元素。”。这又是为什么哪?仔细分析不难看出。通过页面输出的XML内容都会有一个顶层元素<?xml version="1.0" encoding="gb2312" ?> 。因为页面类型被指定为xml,xml文档只能有一个顶层元素。所以要把页面的设计文件(.aspx)文件中的标签全部删掉,只留下

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

这一行。不难看出,这行是服务端标签,不会发送到客户端。

所以,如果您要在页面中显示XML文档内容,有两个要点:

第一、在页面的布局文件(.aspx)中只留下<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>一行;

第二、在页面的代码文件(.cs)中指定好输出到客户端内容的编码方式:

        Response.Charset = "gb2312";         Response.ContentType = "text/xml";         Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

然后再用Response.Write(XML);将XML内容输出到客户端就可以了。当然,XML本身的内容必须是正确的,这可以通过把XML内容粘贴到记事本里另存为*.xml文件,如果可以用IE打开正确显示就说明XML本身是正确的,否则说明XML本身是有问题的。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/greatfeather/archive/2008/06/25/2585701.aspx

 

无法显示 XML 页。
使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。


--------------------------------------------------------------------------------

Prolog 外部不能有 DOCTYPE 声明。处理资源 'http://localhost:3835/Default/Default.aspx' 时出错。第 3 行,位置: 11

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&...


using System.Xml;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType = "text/xml";
        //创建xmldocument对象
        XmlDocument xdoc = new XmlDocument();
        //xml文档路径,当前路径为工程项目路径
        string strFileName = Page.MapPath(Page.AppRelativeTemplateSourceDirectory)
                                    + "TestDocs/sample.xml";  //相对路径
        XmlTextReader xreader = new XmlTextReader(strFileName);
        xreader.WhitespaceHandling = WhitespaceHandling.None;
        while (xreader.Read())
        {
            switch (xreader.NodeType)
            {
                case XmlNodeType.Element:
                    Page.Response.Write(" <"+xreader.Name+">");
                    break;
                case XmlNodeType.Text:
                    Page.Response.Write(xreader.Value+"");
                    break;
                case XmlNodeType.EndElement:
                    Page.Response.Write(" </"+xreader.Name+">");
                    break;
                case XmlNodeType.Comment:
                    Page.Response.Write(" <!--"+xreader.Value+"-->");
                    break;
                case XmlNodeType.XmlDeclaration:
                    Page.Response.Write(" <?xml version='1.0'?>");
                    break;
                case XmlNodeType.Document:
                    break;
                case XmlNodeType.DocumentType:
                    Page.Response.Write(" <!DOCTYPE"+xreader.Name+"["+xreader.Value+"]");
                    break;
            }
        }
        //关闭xmlTextReader
        if (xreader != null)
            xreader.Close();
    }
}

posted on 2009-06-28 08:02  阿C's  阅读(974)  评论(0)    收藏  举报