根级别的数据无效.1号线,1号位置.读取xml时

本文关键字:位置 1号 读取 xml 1号线 数据 无效 | 更新日期: 2023-09-27 18:08:46

当我尝试从第三方公司读取XML文件时,我得到错误:

Data at the root level is invalid. Line 1, position 1.

我在谷歌上读到的问题可能是因为xml文档的数据是utf-8和字符串只接受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;
    }

前几行op 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>

根级别的数据无效.1号线,1号位置.读取xml时

我们(middelpat和我)在同一家公司工作,并找出了为什么会出现错误。

我们将得到的响应写入一个文件并查看该文件。出现错误信息而不是xml.

Apiemail与受信任的IP一起工作。如果你的ip不受信任,你会得到一个纯文本,说你不允许,这将在第1行第1位带来错误。因为那不是xml。现在,我们将把ip添加到可信列表中,并继续工作。

我尝试通过解析来自另一个XDocument的字符串来加载xml,并得到相同的错误。

XDocument xDocData = XDocument.Parse(xDoc.Element("SecuredWebService").Element("data").Element("Approved").Value);

事实证明,这样做"。值"生成的xml开头有一个空格,这是我错误的来源。我通过使用". tostring()"来解决这个问题。

XDocument xDocData = XDocument.Parse(xDoc.Element("SecuredWebService").Element("data").Element("Approved").ToString());

尝试使用'System.Xml.Linq;'命名空间

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();
XDocument doc = new XDocument(blockListRequest);

然后调用

IEnumerable<XElement> elements = doc.Descendants("blockedemail");

将返回'XElement'的集合,您可以使用该集合进行迭代。比如

foreach(var element in elements)
{
   element.GetElement("address").Value;
}

这样做我从来没有遇到任何问题阅读*.xml文件。下面是一些可能有用的教程的参考:

http://www.techrepublic.com/blog/programming-and-development/access-xml-data-using-linq-to-xml/594http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx