【发布时间】:2013-07-02 13:59:00
【问题描述】:
当我尝试从第三方公司读取 xml 文件时,我收到错误:
Data at the root level is invalid. Line 1, position 1.
我在 google 上读过这个问题可能是因为 xml 文档的数据是 utf-8 并且 String 只接受 utf-16。
但我找不到合适的解决方案。我从一个 url 读取了 xml 文件。
这是我写的代码:
private void GetBlockList(DateTime lastUpdate, string username, string password)
{
List<String> m_list = new List<String>();
HttpWebRequest blockListRequest = (HttpWebRequest)WebRequest.Create(string.Format("https://www.apiemail.net/api.aspx?Username={0}&Password={1}&Function=get_blocklist&SID=4", username, password));
HttpWebResponse blockListResponse = (HttpWebResponse)blockListRequest.GetResponse();
XmlDocument blockListXmlDoc = new XmlDocument();
XmlNode root = blockListXmlDoc.DocumentElement;
XmlNodeList blockNodeList = root.SelectNodes("blockedemail");
blockListXmlDoc.Load(blockListResponse.GetResponseStream());
int count = 0;
while (blockNodeList.Count < count)
{
m_list.Add(blockNodeList.Item(count).SelectSingleNode("address").InnerText);
count++;
}
return m_list;
}
前几行操作 xml:(注意这是一个相当大的 xml。)
<?xml version="1.0" encoding="ISO-8859-1"?>
<blockedemails>
<blockedemail>
<address>email</address>
<date>6/4/2011 12:11:14 AM</date>
</blockedemail>
<blockedemail>
<address>email</address>
<date>6/6/2011 1:39:04 PM</date>
</blockedemail>
<blockedemail>
<address>email</address>
<date>4/23/2011 8:56:06 PM</date>
</blockedemail>
【问题讨论】:
-
XML 的前几行会很有用。
-
提议的 utf 问题不太可能。最有可能:xml 以空格开头...我们可以看到 xml 的开头吗? 包括任何空行?
-
或者可能是 BOM?在十六进制编辑器中检查前三个字节。
-
十六进制编辑器显示:00000000: 3C 3F 78 6D 6C 20 76 65 这看起来不像 BOM
-
如果您直接从 URL 加载 XML 而不是通过 HttpWebRequest/Response 加载,您会得到同样的错误吗? (见msdn.microsoft.com/en-us/library/875kz807%28v=VS.100%29.aspx)