【问题标题】:Error when loading XML file - "Data at the root level is invalid"加载 XML 文件时出错 - “根级别的数据无效”
【发布时间】:2012-01-24 22:49:45
【问题描述】:

当我尝试加载 XML file 时,我收到错误消息:“根级别的数据无效。第 1 行,位置 1。”。以下是相关代码:

string line;
StreamReader file = new StreamReader(filepath);
while ((line = file.ReadLine()) != null)
{
  XDocument doc = XDocument.Load("http://api.discogs.com/release/" + line);
  //do processing
}

它的工作方式是我在流阅读器中打开一个文件,其中包含一个版本号列表,例如:

367315
123456
192837

然后我想将它们一一附加到 url 的其余部分,以便我可以一次处理许多 XML 文件。但是,在加载 XML 时,我得到了上述错误。我不知道是什么原因造成的。是格式正确还是编码?我希望任何人都可以帮助我!

【问题讨论】:

  • 您尝试打开的 XML 文件无效。如果您能以某种方式将其拉出并发布,我们可以告诉您更多信息。
  • 文件中的数字列表是否全部?
  • 我去链接并下载了文件 - 看起来它是 JSON 格式的。你确定它应该是 XML 吗?
  • 是的,它的 mime 显示 json。
  • 更新了我的答案以显示您如何查询它以获得您想要的内容。

标签: c# xml


【解决方案1】:

默认情况下,该站点返回 Json... 以使其成为 xml....

            string text;
            using (WebClient client = new WebClient())
            {
                client.Headers["Accept"] = "application/xml";
                text = client.DownloadString(@"http://api.discogs.com/release/" + line);
            }

              var elements = XElement.Parse(text);
              var artists= elements.Descendants("artist")
                   .Select(e =>e.Element("role").Value 
                           + " " 
                           + e.Element("name").Value )
                   .ToList();

              artists.ForEach(Console.WriteLine);

【讨论】:

    【解决方案2】:

    您链接的文件的内容为

        {"resp": {"status": true, "release": {"styles": ["Alternative Rock", "Pop 
    Rock"], "videos": [{"duration": 351, "description": "Coldplay  a Rush of Bloo
    d to the Head", "embed": true, "uri": "http://www.youtube.com/watch?
    v=eoyyr1SFPCY", "title": "Coldplay  a Rush of Blood to the Head"}], "series": 
    [], "labels": [{"name": "Parlophone", "entity_type": "1", "catno": "7243 5 40504 2 
    8", "resource_url": "http://api.discogs.com/labels/2294", "id": 
    2294, "entity_type_name": "Label"}, 
    {"name": "Parlophone", "entity_type": "1", "catno": "540 
    5042", "resource_url": "http://api.discogs.com/labels/2294", "id": etc etc etc
    

    所以它是一个 JSON 文件。使用 JSONDeserializer 获取数据。

    【讨论】:

    • 不知道我们可以将标题更改为我们想要的文件。太精彩了。 :)
    • 相当多的后端可以提供多种格式......省了很多麻烦!
    【解决方案3】:

    返回的 xml 是一个片段。它没有根元素。您不能将 XmlDocument.Load 与片段一起使用。

    This post 应该为您指明正确的方向。

    EDIT:他的链接返回 XML。这是我从 Fiddler 那里得到的:

    HTTP/1.1 200 OK
    Reproxy-Status: yes
    Content-Type: application/xml; charset=utf-8
    Date: Wed, 25 Jan 2012 23:02:42 GMT
    Server: lighttpd
    Content-Length: 10574
    Proxy-Connection: Keep-Alive
    Connection: Keep-Alive
    Age: 0
    
    <resp stat="ok" version="2.0"><release id="367315" status="Accepted"><images><image height="296" type="secondary" uri="http://api.discogs.com/image/R-367315-1169408807.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1169408807.jpeg" width="600" /><image height="600" type="primary" uri="http://api.discogs.com/image/R-367315-1284410494.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410494.jpeg" width="600" /><image height="463" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410524.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410524.jpeg" width="600" /><image height="591" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410539.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410539.jpeg" width="598" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410555.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410555.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410571.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410571.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410583.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410583.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410592.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410592.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410604.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410604.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410613.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410613.jpeg" width="600" /><image height="600" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410625.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410625.jpeg" width="600" /><image height="463" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410632.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410632.jpeg" width="600" /><image height="152" type="secondary" uri="http://api.discogs.com/image/R-367315-1284410641.jpeg" uri150="http://api.discogs.com/image/R-150-367315-1284410641.jpeg" width="599" /></images><artists><artist><id>29735</id><name>Coldplay</name><anv /><join /><role /><tracks /></artist></artists><title>A Rush Of Blood To The Head</title><labels><label catno="7243 5 40504 2 8" name="Parlophone" /><label catno="540 5042" name="Parlophone" /></labels><extraartists><artist><id>1840230</id><name>Dan Keeling (2)</name><anv /><join /><role>A&amp;r</role><tracks /></artist><artist><id>257846</id><name>Audrey Riley</name><anv /><join /><role>Arranged By [String Arrangements]</role><tracks /></artist><artist><id>29735</id><name>Coldplay</name><anv /><join /><role>Arranged By [String Arrangements]</role><tracks /></artist><artist><id>471548</id><name>Blue Source</name><anv /><join /><role>Art Direction</role><tracks /></artist><artist><id>29735</id><name>Coldplay</name><anv /><join /><role>Art Direction</role><tracks /></artist><artist><id>2246115</id><name>Sølve Sundsbø</name><anv /><join /><role>Artwork [Cover Art]</role><tracks /></artist><artist><id>306452</id><name>Rik Simpson</name><anv /><join /><role>Engineer [Additional Engineering By]</role><tracks /></artist><artist><id>351549</id><name>Andrea Wright (2)</name><anv /><join /><role>Engineer [Assisted By]</role><tracks /></artist><artist><id>407167</id><name>Ben Thackeray</name><anv /><join /><role>Engineer [Assisted By]</role><tracks /></artist><artist><id>446281</id><name>Jon Bailey</name><anv /><join /><role>Engineer [Assisted By]</role><tracks /></artist><artist><id>1150797</id><name>Jon Withnall</name><anv>Jon Withnal</anv><join /><role>Engineer [Assisted By]</role><tracks /></artist><artist><id>251683</id><name>Ken Nelson</name><anv>Ken</anv><join /><role>Engineer [Engineered By]</role><tracks /></artist><artist><id>974611</id><name>Dave Holmes (7)</name><anv /><join /><role>Management</role><tracks /></artist><artist><id>1840237</id><name>Estelle Wilkinson</name><anv /><join /><role>Management</role><tracks /></artist><artist><id>1886107</id><name>Nettwerk Management</name><anv>Nettwerk</anv><join /><role>Management</role><tracks /></artist><artist><id>335003</id><name>George Marino</name><anv /><join /><role>Mastered By</role><tracks /></artist><artist><id>29735</id><name>Coldplay</name><anv /><join /><role>Mixed By</role><tracks /></artist><artist><id>113799</id><name>Danton Supple</name><anv /><join /><role>Mixed By</role><tracks>2, 3, 6, 8, 10</tracks></artist><artist><id>251683</id><name>Ken Nelson</name><anv /><join /><role>Mixed By</role><tracks /></artist><artist><id>251682</id><name>Mark Phythian</name><anv /><join /><role>Mixed By</role><tracks /></artist><artist><id>42610</id><name>Chris Martin</name><anv /><join /><role>Performer [Coldplay]</role><tracks /></artist><artist><id>530745</id><name>Guy Berryman</name><anv /><join /><role>Performer [Coldplay]</role><tracks /></artist><artist><id>530747</id><name>Jon Buckland</name><anv /><join /><role>Performer [Coldplay]</role><tracks /></artist><artist><id>530749</id><name>Phil Harvey</name><anv /><join /><role>Performer [Coldplay]</role><tracks /></artist><artist><id>530746</id><name>Will Champion</name><anv /><join /><role>Performer [Coldplay]</role><tracks /></artist><artist><id>2265953</id><name>Tom Sheehan (3)</name><anv /><join /><role>Photography By</role><tracks /></artist><artist><id>2247420</id><name>Zed Nelson</name><anv /><join /><role>Photography By</role><tracks /></artist><artist><id>29735</id><name>Coldplay</name><anv /><join /><role>Producer</role><tracks /></artist><artist><id>251683</id><name>Ken Nelson</name><anv /><join /><role>Producer</role><tracks /></artist><artist><id>251682</id><name>Mark Phythian</name><anv /><join /><role>Producer [Additional Production By]</role><tracks /></artist><artist><id>251683</id><name>Ken Nelson</name><anv>Ken</anv><join /><role>Recorded By</role><tracks /></artist><artist><id>251682</id><name>Mark Phythian</name><anv /><join /><role>Recorded By [With]</role><tracks /></artist><artist><id>42610</id><name>Chris Martin</name><anv>Martin</anv><join /><role>Songwriter</role><tracks /></artist><artist><id>530745</id><name>Guy Berryman</name><anv>Berryman</anv><join /><role>Songwriter</role><tracks /></artist><artist><id>530747</id><name>Jon Buckland</name><anv>Buckland</anv><join /><role>Songwriter</role><tracks /></artist><artist><id>530746</id><name>Will Champion</name><anv>Champion</anv><join /><role>Songwriter</role><tracks /></artist><artist><id>400611</id><name>Ann Lines</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>257846</id><name>Audrey Riley</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>274873</id><name>Chris Tombling</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>400609</id><name>Laura Melhuish</name><anv>Laura Melhewish</anv><join /><role>Strings</role><tracks /></artist><artist><id>303064</id><name>Leo Payne</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>273998</id><name>Peter Lale</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>400613</id><name>Richard George</name><anv /><join /><role>Strings</role><tracks /></artist><artist><id>273997</id><name>Sue Dench</name><anv>Susan Dench</anv><join /><role>Strings</role><tracks /></artist><artist><id>0</id><name>Berryman/Buckland/Champion/Martin</name><anv /><join /><role>Written By</role><tracks /></artist></extraartists><formats><format name="CD" qty="1"><descriptions><description>Album</description></descriptions></format></formats><genres><genre>Rock</genre></genres><styles><style>Alternative Rock</style><style>Pop Rock</style></styles><country>UK &amp; Europe</country><released>2002-08-26</released><notes>Recorded at Studio 2 Mayfair, Studio 3 Parr Street and Studio 1 Air between September 2001 and May 2002.
    Mastered at Sterling Sound.
    
    The Scientist is Dan.
    
    ℗ 2002 The copyright of this sound is owned by EMI Records Ltd. © 2002 EMI Records Ltd. 
    [On back cover:] Published by BMG Music Publishing Ltd. Printed in the EU. Marketed and distributed by EMI.
    [On CD label:] Made in EU.
    This CD is Carbon Neutral courtesy of Future Forests
    </notes><master_id>3354</master_id><data_quality>Correct</data_quality><tracklist><track><position>1</position><title>Politik</title><duration>5:18</duration></track><track><position>2</position><title>In My Place</title><duration>3:48</duration></track><track><position>3</position><title>God Put A Smile Upon Your Face</title><duration>4:57</duration></track><track><position>4</position><title>The Scientist</title><duration>5:09</duration></track><track><position>5</position><title>Clocks</title><duration>5:07</duration></track><track><position>6</position><title>Daylight</title><duration>5:27</duration></track><track><position>7</position><title>Green Eyes</title><duration>3:43</duration></track><track><position>8</position><title>Warning Sign</title><duration>5:31</duration></track><track><position>9</position><title>A Whisper</title><duration>3:58</duration></track><track><position>10</position><title>A Rush Of Blood To The Head</title><duration>5:51</duration></track><track><position>11</position><title>Amsterdam</title><duration>5:19</duration></track></tracklist><identifiers><identifier description="Text" type="Barcode" value="7 24354 05042 8" /><identifier description="Scanned" type="Barcode" value="724354050428" /><identifier type="Rights Society" value="BEL BIEM" /><identifier description="Distribution Code, France" type="Other" value="PM 520" /><identifier type="Label Code" value="LC0299" /><identifier description="Variant 1" type="Matrix / Runout" value="5405042" /><identifier description="Variant 2" type="Matrix / Runout" value="5405042 A838865-01 manufactured by optimal media production" /><identifier description="Mould SID Code, Variant 2" type="Other" value="IFPI 9712" /><identifier description="Mastering SID Code, Variant 2" type="Other" value="IFPI L573" /></identifiers><videos><video duration="351" embed="true" src="http://www.youtube.com/watch?v=eoyyr1SFPCY"><title>Coldplay  a Rush of Blood to the Head</title><description>Coldplay  a Rush of Blood to the Head</description></video></videos></release></resp>
    

    这是一个 xml 片段。因此,您可以使用 XElement.Load,而不是使用 XDocument.Load(抱歉将我之前的回复与 XmlDocument.Load 混淆了)。见this wonderful answer

    【讨论】:

    • 他尝试使用 XDocument,而不是 XmlDocument - 两种不同的野兽;并且数据似乎默认为 JSON,而不是 XML。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多