none
请大家帮忙看下下面的程序为什么提示无法显示?谢谢~ RRS feed

  • 问题

  • 该程序是《ASP.NET 2.0 XML 高级编程(第3版)》书中提供的源代码,原文如下:

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Xml" %>

    <script runat="server">
        void Page_Load(object sender, EventArgs e)
        {
            string xmlPath = Request.PhysicalApplicationPath + @"\Application_Data\Books.xml";
            XmlDocument booksDoc = new XmlDocument();
            XmlDocument empDoc = new XmlDocument();
            Response.ContentType = "text/xml";
            try
            {
                //Load the XML from the file
                booksDoc.PreserveWhitespace = true;
                booksDoc.Load(xmlPath);
                //Write the XML onto the browser
                Response.Write(booksDoc.InnerXml);
                //Load the XML from a String
                empDoc.LoadXml("<employees>" +
                            "<employee id='1'>" +   
                            "<name><firstName>Nancy</firstName>" +
                            "<lastName>Davolio</lastName>" +                      
                            "</name><city>Seattle</city>" +
                            "<state>WA</state><zipCode>98122</zipCode>" +
          "</employee></employees>");   
                //Save the XML data onto a file                   
                empDoc.Save(@"C:\Data\Employees.xml");
            }
            catch (XmlException xmlEx)
            {
                Response.Write("XmlException: " + xmlEx.Message);
            }
            catch (Exception ex)
            {
                Response.Write("Exception: " + ex.Message);
            }       
        }  
    </script>

    在用web浏览测试时自己又加上如下代码:
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>LoadXmlTest</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
       
        </div>
        </form>
    </body>
    </html>
    保存并测试却出现如下结果:
    无法显示 XML 页。

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


     

    文档的顶层无效。处理资源 'http://localhost/Test/2_LoadXml.aspx' 时出错。第 27 行,位置: 13

    </bookstore> 

    请问这是什么原因,应该不是代码的原因吧?本人新手,有些了解不多,希望能得到详尽的解答!小生在此有礼了!谢谢~
    急切等待中.........
     

    2009年3月18日 14:19

答案

  • 另外
    执行
    empDoc.Save(@"C:\Data\Employees.xml");
    这句的时候,如果没有权限,则也抛出错误信息,导致xml格式失败。
    一般情况下,站点不在Data 下,好的写法是
    empDoc.Save(Server.MapPath("Employees.xml"));

    并且应用程序根目录有匿名账户(aspnet或者network Service)写入权限

    很可能是
     catch (XmlException xmlEx)
            {
                Response.Write("XmlException: " + xmlEx.Message);
            }
            catch (Exception ex)
            {
                Response.Write("Exception: " + ex.Message);
            }       

    这2行导致的错误。

    上面的代码是2个例子的和在一起的,所以,如果你测试一个,可以将另外一个注释掉一部分代码

    或者改成这样的写法:
    catch (XmlException xmlEx)
    {
        Response.Write("<!--XmlException: " + xmlEx.Message + "-->");
    }
    catch (Exception ex)
    {
      Response.Write("<!--Exception: " + ex.Message + "-->");
    }  


    孟宪会
    2009年3月18日 15:40
    版主
  • 解决办法1:以上书中原文就是你的完整aspx。不要自己加

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


    办法2:
    Response.ClearContent();
    Response.Write(booksDoc.InnerXml);
    Response.End();

    既然你要输出xml格式的Response.ContentType = "text/xml";
    就不能再加别的内容了,否则不是格式良好的xml了
    孟宪会
    2009年3月18日 15:30
    版主

全部回复

  • xml文件已经放在了相应的物理路径了。其内容如下:
    <?xml version='1.0' encoding='UTF-8'?>
    <!-- This file represents a fragment of a book store inventory database -->
    <bookstore>
     <book genre="autobiography">
      <title>The Autobiography of Benjamin Franklin</title>
      <author>
       <first-name>Benjamin</first-name>
       <last-name>Franklin</last-name>
      </author>
      <price>8.99</price>
     </book>
     <book genre="novel">
      <title>The Confidence Man</title>
      <author>
       <first-name>Herman</first-name>
       <last-name>Melville</last-name>
      </author>
      <price>11.99</price>
     </book>
     <book genre="philosophy">
      <title>The Gorgias</title>
      <author>
       <name>Plato</name>
      </author>
      <price>9.99</price>
     </book>
    </bookstore>
    2009年3月18日 15:12
  • 解决办法1:以上书中原文就是你的完整aspx。不要自己加

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


    办法2:
    Response.ClearContent();
    Response.Write(booksDoc.InnerXml);
    Response.End();

    既然你要输出xml格式的Response.ContentType = "text/xml";
    就不能再加别的内容了,否则不是格式良好的xml了
    孟宪会
    2009年3月18日 15:30
    版主
  • 另外
    执行
    empDoc.Save(@"C:\Data\Employees.xml");
    这句的时候,如果没有权限,则也抛出错误信息,导致xml格式失败。
    一般情况下,站点不在Data 下,好的写法是
    empDoc.Save(Server.MapPath("Employees.xml"));

    并且应用程序根目录有匿名账户(aspnet或者network Service)写入权限

    很可能是
     catch (XmlException xmlEx)
            {
                Response.Write("XmlException: " + xmlEx.Message);
            }
            catch (Exception ex)
            {
                Response.Write("Exception: " + ex.Message);
            }       

    这2行导致的错误。

    上面的代码是2个例子的和在一起的,所以,如果你测试一个,可以将另外一个注释掉一部分代码

    或者改成这样的写法:
    catch (XmlException xmlEx)
    {
        Response.Write("<!--XmlException: " + xmlEx.Message + "-->");
    }
    catch (Exception ex)
    {
      Response.Write("<!--Exception: " + ex.Message + "-->");
    }  


    孟宪会
    2009年3月18日 15:40
    版主
  • 孟老师,我刚才采用你建议的方法二试了试。结果出现一下提示:
    无法显示 XML 页。

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


    文档的顶层无效。处理资源 'http://localhost/Test/2_LoadXml.aspx' 时出错。第 27 行,位置: 13

    </bookstore> 
    这是怎么回事儿?不清楚哦!xml文件是书中提供的代码,应该是完整的。
    2009年3月18日 15:52
  • 已经解决!非常感谢~
    其中的两个测试,创建xml文件的那个实例确实是因为写入权限的问题。注释掉它就出现想要的结果了!呵呵~再次感谢孟老师!Good night!我还需加紧学习才是~
    2009年3月18日 16:13