首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根级别的数据无效。第1行,位置1。读取xml时

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

Stack Overflow用户
提问于 2011-09-17 17:59:59
回答 3查看 22.2K关注 0票数 3

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

代码语言:javascript
运行
复制
Data at the root level is invalid. Line 1, position 1.

我在google上看到过这个问题,可能是因为xml文档的数据是utf-8,而字符串只接受utf-16。

但我找不到合适的解决方案。我从一个url读取了xml文件。

这是我写的代码:

代码语言:javascript
运行
复制
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。)

代码语言:javascript
运行
复制
<?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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-17 19:34:02

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

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

Apiemail使用受信任的IP。如果您的ip不受信任,您将得到一个纯文本,说明您不被允许,这将在第1行的位置1上带来一个错误。因为这不是xml。现在,我们将该ip添加到受信任列表中,然后继续工作。

票数 3
EN

Stack Overflow用户

发布于 2013-07-02 13:59:00

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

代码语言:javascript
运行
复制
XDocument xDocData = XDocument.Parse(xDoc.Element("SecuredWebService").Element("data").Element("Approved").Value);

事实证明,执行此操作".Value“会生成一个开头带有空格的xml,这就是我的错误的来源。我通过使用".ToString()“解决了这个问题。

代码语言:javascript
运行
复制
XDocument xDocData = XDocument.Parse(xDoc.Element("SecuredWebService").Element("data").Element("Approved").ToString());
票数 1
EN

Stack Overflow用户

发布于 2011-09-17 18:26:38

请尝试使用“%System.Xml.Linq;”命名空间。

代码语言:javascript
运行
复制
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);

然后只需调用

代码语言:javascript
运行
复制
IEnumerable<XElement> elements = doc.Descendants("blockedemail");

将返回“XElement”的集合,您可以使用它来遍历。有一些方法,比如

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7453943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档