Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

asp.net - What could be causing an XML Parsing Error: no element found?

I recently migrated an ASP site from my dev machine to a live server. All the pages except my FAQ page works just fine, but my FAQ brings up:

XML Parsing Error: no element found
Location: http://geniusupdate.com/GSHelp/faq.aspx
Line Number 1, Column 1:

The only changes I have made were changing the connection string on my SQL page from local to the string specified by my hosting service. Any tips on what I can do to find the root of this issue?

here is the source to my FAQ page:

<%@ Page Language="VB" MasterPageFile="~/theMaster.master" AutoEventWireup="false" CodeFile="faq.aspx.vb" Inherits="faq" Title="Untitled Page" %>
<%@ Import Namespace="sqlstuff" %>
<%@ Import Namespace="functions" %>

<asp:Content ContentPlaceHolderID="page_title" ID="theTitle" runat="server">
    FAQ</asp:Content>
<asp:Content ContentPlaceHolderID="column1_title" ID="col1Title" runat="server">
    <%=faqPageTitle(Request.QueryString("cid"))%></asp:Content>
<asp:Content ContentPlaceHolderID="column1" ID="columnContent" runat="server">

     <p>Click on a question to expand it to see the answer!</p>
     <p><%  If cID >= 0 Then
                Dim theFaq As New List(Of faqContent), iterate As Integer = 0
                theFaq = sqlStuff.getFaqs(cID)
                For Each oFaq As faqContent In theFaq
                    Response.Output.WriteLine("<h4 id={0} class={1}>Q: {2}</h4>", _
                                                 addQuotes("gsSwitch{0}-title", iterate), _
                                                 addQuotes("handCursor"), _
                                                 oFaq.Content.Question)
                    Response.Output.WriteLine("<div id={0} class={1}><string>A: </strong>{2}</div>", _
                                                 addQuotes("gsSwitch{0}", iterate), _
                                                 addQuotes("gsSwitch"), _
                                                 oFaq.Content.Answer)

                    iterate += 1
                Next
            Else
                Response.Output.Write("Here you can find a lot of information about eTHOMAS and how to expedite your office tasks.{0}", ControlChars.NewLine)
            End If
    %></p>
    <script type="text/javascript">
        var gsContent = new switchcontent("gsSwitch", "div")
        var eID = '<%= expandID %>'
        gsContent.collapsePrevious(true) // TRUE: only 1; FALSE: any number
        gsContent.setPersist(false)
        if(eID >= 0){
            gsContent.defaultExpanded(eID) // opens the searched FAQ
            document.getElementById('gsSwitch' + eID + '-title').scrollIntoView(true) // scrolls to selected FAQ
        }        
        gsContent.init()
    </script>
</asp:Content>
<asp:Content ContentPlaceHolderID="subcolumn_right_title" ID="rSideColTitle" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderID="subcolumn_right" ID="rSideColContent" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderID="subcolumn_left_title" ID="lSideColTitle" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderID="subcolumn_left" ID="lSideColContent" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderID="sidecolumn_title" ID="sideColtitle" runat="server">
</asp:Content>
<asp:Content ContentPlaceHolderID="sidecolumn" ID="sideCol" runat="server">
    <%  If cID >= 0 Then
            Response.Write(constructFaqSideMenu(CInt(Request.QueryString("cid"))))
        Else
            Response.Write(constructFaqSideMenu())
        End If
    %>
</asp:Content>

I found this on another forum link:

Well, it appears it's a bit of both. The message is generated by Firefox, but caused by the framework. For some reason, .NET generates a response type of "application/xml" when it creates an empty page. Firefox parses the file as XML and finding no root element, spits out the error message.

IE does not render the page, period. This is where the XML is coming from.

Here is the constructFaqSideMenu() function:

Public Shared Function constructFaqSideMenu(ByVal oSelID As Integer) As String
    Dim oCatList As New List(Of faqCategory)
    Dim oRet As New StringBuilder
    Dim iterate As Integer = 1, extraTag As String = ""

    oCatList = sqlStuff.getFaqCats

    oRet.AppendFormattedLine("<ul id={0}>", addQuotes("submenu"))
    oRet.AppendFormattedLine("    <li id={0}>FAQ Categories</li>", addQuotes("title"))
    For Each category As faqCategory In oCatList
        If iterate = oSelID Then
            extraTag = String.Format(" id={0}", addQuotes("active"))
        Else
            extraTag = ""
        End If
        oRet.AppendFormattedLine("    <li{0}><a href={1}>{2}</a></li>", extraTag, addQuotes("faq.aspx?cid={0}", iterate), StrConv(category.Title,         VbStrConv.ProperCase))
        iterate += 1
    Next
    oRet.AppendLine("</ul>")

    Return oRet.ToString
End Function

And here is the source of the blank page IE returns:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This is a very old thread, but I found this while googling for the same problem and wanted to contribute a definitive answer for anyone else who searches for this in the future.

I got this error when an exception was thrown while the page directives were being parsed. I updated aspx files from source control, and the developer who checked them in had a different version of a 3rd party library of controls. The Register Assembly page directives referenced a version I didn't have, so the exception was thrown at this point. I'm assuming that this error shows up in the client when an exception is thrown so early in the page request life cycle that nothing at all is sent to the client.

We are logging all exceptions at the app level in Global.Application_Error, so I was able to get this info from the logs. We grab the last exception with the following code:

Server.GetLastError().GetBaseException()

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...