I am using a third-party DLL which transmits an XML document over the internet.
我正在使用第三方DLL在internet上传输XML文档。
Why would the DLL be throwing the following exception?
为什么DLL会抛出以下异常?
Data at the root level is invalid. Line 1, position 1. (see below for full exception text.)
根级别的数据无效。1号线,位置1。(请参阅下面的完整异常文本。)
Here are the first few lines of the XML Document:
下面是XML文档的前几行:
<?xml version="1.0" encoding="utf-8"?> <REQUEST> <HEADER>
<REQUESTID>8a5f6d56-d56d-4b7b-b7bf-afcf89cd970d</REQUESTID>
<MESSAGETYPE>101</MESSAGETYPE>
<MESSAGEVERSION>3.0.2</MESSAGEVERSION>
Exception:
例外:
System.ApplicationException was caught
Message=Unexpected exception.
Source=FooSDK
StackTrace:
at FooSDK.RequestProcessor.Send(String SocketServerAddress, Int32 port)
at Foo.ExecuteRequest(Int32 messageID, IPayload payload, Provider prov)
at Foo.SendOrder(Int32 OrderNo)
InnerException: System.Xml.XmlException
LineNumber=1
LinePosition=1
Message=Data at the root level is invalid. Line 1, position 1.
Source=System.Xml
SourceUri=""
StackTrace:
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.LoadXml(String xml)
at XYZ.RequestProcessor.GetObjectFromXML(String xmlResult)
at XYZ.RequestProcessor.Send(String SocketServerAddress, Int32 port)
InnerException:
4 个解决方案
#1
40
I eventually figured out there was a byte mark exception and removed it using this code:
我最终发现了一个字节标记异常,并使用以下代码删除了它:
string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(_byteOrderMarkUtf8))
{
var lastIndexOfUtf8 = _byteOrderMarkUtf8.Length-1;
xml = xml.Remove(0, lastIndexOfUtf8);
}
#2
10
I can give you two advices:
我可以给你两个建议:
- It seems you are using "LoadXml" instead of "Load" method. In some cases, it helps me.
- 看起来您使用的是“LoadXml”而不是“Load”方法。在某些情况下,它帮助了我。
- You have an encoding problem. Could you check the encoding of the XML file and write it?
- 你有一个编码问题。您能检查XML文件的编码并编写它吗?
#3
2
Remove everything before <?xml version="1.0" encoding="utf-8"?>
删除所有之前< ?xml version = " 1.0 " encoding = " utf - 8 " ? >
Sometimes, there is some "invisible" (not visible in all text editors). Some programs add this.
有时,存在一些“不可见的”(并非在所有文本编辑器中都可见)。一些程序添加。
It's called BOM, you can read more about it here: https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding
它叫做BOM,你可以在这里读到更多的东西:https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding。
#4
0
if you are using XDocument.Load(url);
to fetch xml from another domain, it's possible that the host will reject the request and return and unexpected (non-xml) result, which results in the above XmlException
如果您正在使用XDocument.Load(url);要从另一个域中获取xml,主机可能会拒绝请求并返回意外结果(非xml),这导致了上面的XmlException
See my solution to this eventuality here: XDocument.Load(feedUrl) returns "Data at the root level is invalid. Line 1, position 1."
请看我的解决方案:XDocument.Load(feedUrl)返回“根级的数据无效”。1号线,位置1。”
#1
40
I eventually figured out there was a byte mark exception and removed it using this code:
我最终发现了一个字节标记异常,并使用以下代码删除了它:
string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(_byteOrderMarkUtf8))
{
var lastIndexOfUtf8 = _byteOrderMarkUtf8.Length-1;
xml = xml.Remove(0, lastIndexOfUtf8);
}
#2
10
I can give you two advices:
我可以给你两个建议:
- It seems you are using "LoadXml" instead of "Load" method. In some cases, it helps me.
- 看起来您使用的是“LoadXml”而不是“Load”方法。在某些情况下,它帮助了我。
- You have an encoding problem. Could you check the encoding of the XML file and write it?
- 你有一个编码问题。您能检查XML文件的编码并编写它吗?
#3
2
Remove everything before <?xml version="1.0" encoding="utf-8"?>
删除所有之前< ?xml version = " 1.0 " encoding = " utf - 8 " ? >
Sometimes, there is some "invisible" (not visible in all text editors). Some programs add this.
有时,存在一些“不可见的”(并非在所有文本编辑器中都可见)。一些程序添加。
It's called BOM, you can read more about it here: https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding
它叫做BOM,你可以在这里读到更多的东西:https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding。
#4
0
if you are using XDocument.Load(url);
to fetch xml from another domain, it's possible that the host will reject the request and return and unexpected (non-xml) result, which results in the above XmlException
如果您正在使用XDocument.Load(url);要从另一个域中获取xml,主机可能会拒绝请求并返回意外结果(非xml),这导致了上面的XmlException
See my solution to this eventuality here: XDocument.Load(feedUrl) returns "Data at the root level is invalid. Line 1, position 1."
请看我的解决方案:XDocument.Load(feedUrl)返回“根级的数据无效”。1号线,位置1。”