2013-07-09 45 views
0

更新 我有一个相当大的XML文档,其中包含超过20,000个对象。突然间它抛出一个System.XML.XMLException:根元素丢失。Windows Phone System.XML.XMLException:根元素丢失

这里是我的代码块:在XML我的卡对象的

public async Task<int> readDatabase() 
    { 

     IsolatedStorageFile myFile = IsolatedStorageFile.GetUserStoreForApplication(); 
     List<card> temp= new List<card>(); 
     XmlSerializer s = new XmlSerializer(typeof(List<card>), new XmlRootAttribute("card")); 
     using (TextReader reader = new StreamReader(myFile.OpenFile("cards.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite))) 
     { 
       cardList = (List<card>)s.Deserialize(reader); 
     } 
     return 1; 


    } 

<?xml version="1.0" encoding="UTF-8"?> 
    <mtg_carddatabase> 
    <bdd_date><![CDATA[5/1/2013]]></bdd_date> 
    <bdd_version><![CDATA[1.00]]></bdd_version> 
    <bdd_name>Magic the Gathering® Card Database</bdd_name> 
    <bdd_editor>Wizards of the Coast LLC</bdd_editor> 
    <sets> 
    <set> 
    <name><![CDATA[15th Anniversary]]></name> 
    <code><![CDATA[15A]]></code> 
    <code_magiccards><![CDATA[15ANN]]></code_magiccards> 
    <date><![CDATA[00/0000]]></date> 
    <is_promo><![CDATA[True]]></is_promo> 
    </set> 
    </sets> 
    <cards> 
    <card> 

    <id><![CDATA[3064]]></id> 

    <name><![CDATA[Urza's Engine]]></name> 

    <set><![CDATA[AL]]></set> 

    <type><![CDATA[Artifact Creature — Juggernaut]]></type> 

    <rarity><![CDATA[U]]></rarity> 

    <manacost><![CDATA[{5}]]></manacost> 

    <converted_manacost><![CDATA[5]]></converted_manacost> 

    <power><![CDATA[1]]></power> 

    <toughness><![CDATA[5]]></toughness> 

    <loyalty></loyalty> 

    <ability><![CDATA[Trample£{3}: Urza's Engine gains banding until end of turn. #_(Any 
    creatures with banding, and up to one without, can attack in a band. Bands are blocked as a 
    group. If any creatures with banding you control are blocking or being blocked by a 
    creature, you divide that creature's combat damage, not its controller, among any of the 
    creatures it's being blocked by or is blocking.)_#£{3}: Attacking creatures banded with 
    Urza's Engine gain trample until end of turn.]]></ability> 

    <flavor><![CDATA[#_"Humans and machines working together can be fearsome indeed"Arcum 
    Dagsson_#]]></flavor> 

    <variation></variation> 

    <artist><![CDATA[Greg Simanson]]></artist> 

    <number><![CDATA[180]]></number> 

    <rating><![CDATA[2.449]]></rating> 

    <ruling><![CDATA[£10/1/2008 : If a creature with banding attacks, it can team up with any 
    number of other attacking creatures with banding (and up to one nonbanding creature) and 
    attack as a unit called a "band." The band can be blocked by any creature that could block a 
    single creature in the band. Blocking any creature in a band blocks the entire band. If a 
    creature with banding is blocked, the attacking player chooses how the blockers' damage is 
    assigned. £10/1/2008 : A maximum of one nonbanding creature can join an attacking band no 
    matter how many creatures with banding are in it. £10/1/2008 : Creatures in the same band 
    must all attack the same player or planeswalker. £10/1/2009 : If a creature in combat has 
    banding, its controller assigns damage for creatures blocking or blocked by it. That player 
    can ignore the damage assignment order when making this assignment.]]></ruling> 

    <color><![CDATA[A]]></color> 

    <generated_mana></generated_mana> 

    <pricing_low><![CDATA[0,08]]></pricing_low> 

    <pricing_mid><![CDATA[0,25]]></pricing_mid> 

    <pricing_high><![CDATA[1,01]]></pricing_high> 

    <back_id></back_id> 

    <watermark></watermark> 

    <name_CN><![CDATA[]]></name_CN> 

    <name_TW><![CDATA[]]></name_TW> 

    <name_FR><![CDATA[Locomotive d'Urza]]></name_FR> 

    <name_DE><![CDATA[Urzas Maschine]]></name_DE> 

    <name_IT><![CDATA[Motrice di Urza]]></name_IT> 

    <name_JP><![CDATA[]]></name_JP> 

    <name_PT><![CDATA[Engenho de Urza]]></name_PT> 

    <name_RU><![CDATA[]]></name_RU> 

    <name_ES><![CDATA[Ingenio de Urza]]></name_ES> 

    <name_KO><![CDATA[]]></name_KO> 

    <legality_Block><![CDATA[b]]></legality_Block> 

    <legality_Standard><![CDATA[b]]></legality_Standard> 

    <legality_Extended><![CDATA[b]]></legality_Extended> 

    <legality_Modern><![CDATA[b]]></legality_Modern> 

    <legality_Legacy><![CDATA[v]]></legality_Legacy> 

    <legality_Vintage><![CDATA[v]]></legality_Vintage> 

    <legality_Highlander><![CDATA[v]]></legality_Highlander> 

    <legality_French_Commander><![CDATA[v]]></legality_French_Commander> 

    <legality_Commander><![CDATA[v]]></legality_Commander> 

    <legality_Peasant><![CDATA[u]]></legality_Peasant> 

    <legality_Pauper><![CDATA[b]]></legality_Pauper> 

    </card> 
    </cards> 
    </mtg_carddatabase> 

问题看起来像它与我的解串器,但它工作得很好截止到上周。 :(

+0

何去何从你的xml的元素是什么? xml文档必须具有单个根元素。你可能会摆脱它把你的XML作为一个片段,但我不知道这是否会在这种情况下工作。 – Will

+0

确实,在你的示例XML中,根元素缺失。 – anderZubi

+0

它是我第一次使用创建的XML文档创建如何设置根目录? –

回答

0

因此,XML格式确实存在问题,它通过了XML验证器,我使用了三种不同的方法,但仍然无法使旧的代码正常工作。旧版本,它仍然不运行,我倾向于指责Visual Studio现在,我正在运行2013预览,这是我没有测试的唯一变量,我想找到一种方法来使旧方法工作,所以如果任何人都有一些尚未被尝试过的事情乐于继续前进,这种方法需要花费较长的时间来加载用户体验,我确实得到了它的工作,这就是我不得不求助于XML 。

try 
     { 
      XDocument xdoc = XDocument.Load("cards.xml"); 
      var cards = from c in xdoc.Descendants("card") 
         select new card() 
         { 
          Nname = (string)c.Element("name"), 
          Nmanacost = (string)c.Element("manacost"), 
          Nset = (string)c.Element("set"), 
          Ncolor = (string)c.Element("color"), 
          Nid = (string)c.Element("id"), 
          Nability = (string)c.Element("text"), 
          Ntype = (string)c.Element("type"), 
          Npricing_high = (string)c.Element("pricing_high"), 
          Npricing_low = (string)c.Element("pricing_low"), 
          Npricing_mid = (string)c.Element("pricing_mid"), 
          Nartist = (string)c.Element("artist"), 
          Nrarity = (string)c.Element("rarity"), 
          Nback_id = (string)c.Element("back_id"), 
          Nconverted_manacost = (string)c.Element("converted_manacost"), 
          Nflavor = (string)c.Element("flavor"), 
          Ngenerated_mana = (string)c.Element("generated_mana"), 
          Nlegality_Block = (string)c.Element("legality_Block"), 
          Nlegality_Commander = (string)c.Element("legality_Commander"), 
          Nlegality_Extended = (string)c.Element("legality_Extended"), 
          Nlegality_French_Commander = (string)c.Element("legality_French_Commander"), 
          Nlegality_Highlander = (string)c.Element("legality_Highlander"), 
          Nlegality_Legacy = (string)c.Element("legality_Legacy"), 
          Nlegality_Modern = (string)c.Element("legality_Modern"), 
          Nlegality_Pauper = (string)c.Element("legality_Pauper"), 
          Nlegality_Peasant = (string)c.Element("legality_Peasant"), 
          Nlegality_Vintage = (string)c.Element("legality_Vintage"), 
          Nlegality_Standard = (string)c.Element("legality_Standard"), 
          Nloyalty = (string)c.Element("loyalty"), 
          Nname_CN = (string)c.Element("name_CN"), 
          Nname_DE = (string)c.Element("name_DE"), 
          Nname_ES = (string)c.Element("name_ES"), 
          Nname_FR = (string)c.Element("name_FR"), 
          Nname_IT = (string)c.Element("name_IT"), 
          Nname_JP = (string)c.Element("name_JP"), 
          Nname_KO = (string)c.Element("name_KO"), 
          Nname_PT = (string)c.Element("name_PT"), 
          Nname_RU = (string)c.Element("name_RU"), 
          Nname_TW = (string)c.Element("name_TW"), 
          Nnumber = (string)c.Element("number"), 
          Npower = (string)c.Element("power"), 
          Nrating = (string)c.Element("rating"), 
          Nruling = (string)c.Element("ruling"), 
          Ntoughness = (string)c.Element("toughness"), 
          Nvariation = (string)c.Element("variation"), 
          Nwatermark = (string)c.Element("watermark") 
          //Url = (string)c.Element("set").Attribute("picURL") 
         }; 
          cardList = cards.ToList(); 
     } 
     catch (Exception e) 
     { 
      string error = e.Message; 
     } 
     return 1;