繁体   English   中英

根级别的数据无效。 第1行,第1位,同时读取xml

[英]Data at the root level is invalid. Line 1, position 1. while reading xml

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

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

我在google上看到问题可能是因为xml文档的数据是utf-8而String只接受utf-16。

但我找不到合适的解决方案。 我从网址上读取了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>

我们(middelpat和我)在同一家公司工作,并弄清楚它为什么会出错。

我们写了一个文件的响应并查看该文件。 有一条错误消息而不是xml。

Apiemail使用可靠的IP。 如果您的ip不受信任,则会得到一个明文,说明您不允许这样做会在第1行的位置上出现错误1.原因不是xml。 我们现在将ip添加到可信列表并继续工作。

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

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

事实证明,执行此“.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/594 http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM