从Xml文件加载

时间:2016-12-11 19:02:00

标签: c# xml linq-to-xml

好的,所以这是非常基本的,但我现在开始学习如何阅读XML文档,我通常会在这里找到比在线指南更全面的答案。本质上我正在编写一个口袋妖怪游戏,它使用一个XML文件来加载所有的统计数据(我从其他人那里刷过它)。用户将输入一个神奇宝贝,然后我想从中读取神奇宝贝的基本统计数据。 XML文件,为了给出一个模板,这将是一个口袋妖怪:

<Pokemon>
   <Name>Bulbasaur</Name>

   <BaseStats>
     <Health>5</Health>
     <Attack>5</Attack>
     <Defense>5</Defense>
     <SpecialAttack>7</SpecialAttack>
     <SpecialDefense>7</SpecialDefense>
     <Speed>5</Speed>
   </BaseStats>
</Pokemon>

我尝试使用的代码是:

XDocument pokemonDoc = XDocument.Load(@"File Path Here");
        while(pokemonDoc.Descendants("Pokemon").Elements("Name").ToString() == cbSpecies.SelectedText)
        {
            var Stats = pokemonDoc.Descendants("Pokemon").Elements("BaseStats");
        }

但是这只是将pokemonDoc返回为null,任何想法我哪里出错?

注意:

cbSpeciesSelect是用户选择他们想要哪种口袋妖怪的地方。

文件路径绝对有效,因为我已在程序中使用它

while循环永远不会真正开始

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的代码:

foreach(var e in pokemonDoc.Descendants("Pokemon").Elements("Name"))
{
    if(e.Value==cbSpecies.SelectedText)
    {
        var Stats = pokemonDoc.Descendants("Pokemon").Elements("BaseStats");
    }
}

答案 1 :(得分:1)

试试xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var pokemon = doc.Descendants("Pokemon").Select(x => new {
                name = (string)x.Element("Name"),
                health = (int)x.Element("BaseStats").Element("Health"),
                attack = (int)x.Element("BaseStats").Element("Attack"),
                defense = (int)x.Element("BaseStats").Element("Defense"),
                specialAttack = (int)x.Element("BaseStats").Element("SpecialAttack"),
                specialDefense = (int)x.Element("BaseStats").Element("SpecialDefense"),
                speed = (int)x.Element("BaseStats").Element("Speed"),
            }).FirstOrDefault();
        }
    }
}