Что может вызвать ошибку XML Parsing: элемент не найден?
Недавно я перенес сайт ASP с моей машины dev на живой сервер. Все страницы, кроме моей страницы часто задаваемых вопросов, работают отлично, но мой FAQ поднимает:
XML Parsing Error: no element found
Location: http://geniusupdate.com/GSHelp/faq.aspx
Line Number 1, Column 1:
Единственные изменения, которые я сделал, это изменение строки подключения на моей странице SQL из локальной строки, указанной моей службой хостинга. Любые советы о том, что я могу сделать, чтобы найти корень этой проблемы?
вот источник моей страницы часто задаваемых вопросов:
<%@ 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>
Я нашел это на другом форуме ссылка:
Ну, похоже, это и то, и другое. Сообщение генерируется Firefox, но вызвано каркасом. По какой-то причине .NET генерирует тип ответа "application/xml" при создании пустой страницы. Firefox анализирует файл как XML и не находит корневой элемент, выплевывает сообщение об ошибке.
IE не отображает страницу, период. Вот откуда идет XML.
Вот функция constructFaqSideMenu():
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
И вот источник пустой страницы IE возвращает:
<!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>
Ответы
Ответ 1
Это очень старый поток, но я нашел это во время поиска по той же проблеме и хотел дать окончательный ответ любому, кто ищет это в будущем.
Я получил эту ошибку, когда было отправлено исключение, в то время как анализы страниц были проанализированы. Я обновил aspx файлы из исходного элемента управления, а разработчик, который их проверил, имел другую версию сторонней библиотеки элементов управления. В директивах на странице Assembly Assembly ссылаются версии, которых у меня не было, поэтому в этот момент было создано исключение. Я предполагаю, что эта ошибка появляется в клиенте, когда исключение создается так рано в жизненном цикле запроса страницы, что ничего не отправляется клиенту.
Мы регистрируем все исключения на уровне приложения в Global.Application_Error
, поэтому я смог получить эту информацию из журналов. Мы воспользуемся последним исключением из следующего кода:
Server.GetLastError().GetBaseException()
Ответ 2
Я ничего не знаю об ASP.NET, но из моего общего опыта работы с веб-фреймворками похоже, что ваше приложение вообще ничего не выдавало. Обычно это означает, что существовало исключение до того, как произошел какой-либо вывод, поэтому попробуйте просмотреть журналы, чтобы узнать, что вызвало это...
Ответ 3
У меня была эта проблема на всех моих страницах при развертывании в IIS, оказалось, что учетная запись, запущенная в пуле приложений, не имеет достаточных привилегий для подключения и выполнения запросов к базе данных
Ответ 4
нет объявления xml в начале
<? xml version = "1.0"? >
Ответ 5
Возможно, некоторые проблемы с кодировкой, поврежденные "unicode sequence" в начале вашего файла или что-то в этом роде?
Ответ 6
Может быть, нет XML (XML - пустая строка)?
Ответ 7
Сайт разработан в ASP.NET, а не в XML. Имеет ли это какое-либо отношение к проблеме?
Ответ 8
Для меня возникла такая же ошибка, и решение этой ошибки - это первый открытый диспетчер iis, а затем в диспетчере iis под именем вашего сервера дважды щелкните расширение веб-службы и в этом случае, если ваши активные серверные страницы "запрещены", измените его на "разрешить", и теперь ваша страница asp будет запущена.
Ответ 9
Если вы вызываете .vb или .cs script с страницы .aspx и получаете эту ошибку, добавьте следующий код на страницу .aspx. По-видимому, FireFox нуждается в некотором видимости действительной маркировки. Это сработало для меня.
<html>
<body></body>
</html>
Ответ 10
У меня была такая же проблема. Это было вызвано тем, что я обрабатывал исключения в global.asax и называл Server.ClearError(), не вызывая Response.Redirect или подобное. Я думаю, что код не удался, и ошибка была удалена, поэтому asp.net не смог отобразить ошибку и не смог отобразить запрошенную страницу.
Я также получил эту ошибку, потому что я переопределил метод рендеринга страницы и забыл вызвать base.render(writer), тем самым отправив пустую страницу в браузер.
Ответ 11
Я нашел эту проблему, потому что URL-адрес перенаправлялся в другое место. Исправление, которое разрешило проблему.
Он перенаправлялся на http://localhost/forms/abc.aspx
, однако он должен был быть перенаправлен на http://localhost/projectname/forms/abc.aspx
Ответ 12
Это может быть две причины. Один из них может иметь один или несколько незакрытых тегов HTML, или вы, возможно, не задали тип контента для нашего ответа. Подробнее читайте http://chiragrdarji.wordpress.com/2010/02/17/xml-parsing-error-no-element-found/.
Ответ 13
Я столкнулся с этой проблемой при установке моих сервисов на новую виртуальную машину. (т.е. на этой машине еще не было других служб WCF).
Вам необходимо установить и добавить отображение для служб WCF в IIS. Самый простой способ сделать это:
-
Запустите командную строку с повышенными правами администратора
-
В командной строке перейдите в папку C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation
-
Запустите команду ServiceModelReg.exe -i
-
Перезапустите IIS, выполнив команду iisreset
Ответ 14
Я столкнулся с той же проблемой. Мое решение может не применяться к ASP.NET, я работаю в node/express land. Моя конечная точка API не возвращала никаких данных в ответ:
return res.status(200).end();
Когда я включил что-то в ответ на данные, он решил проблему:
return res.status(200).send('ok').end();