2013-06-30 149 views
1

我一直在尝试过去的几个小时,几乎没有成功,从.xml文件读取。在C#中读取.XML文件

我想:

XmlReader reader = XmlReader.Create("ChampionList.xml"); 

     reader.ReadToFollowing("Name"); 
     reader.MoveToFirstAttribute(); 
     string nume = reader.Value; 
     MessageBox.Show(nume); 

我的XML看起来是这样的:

<?xml version="1.0" encoding="utf-8" ?> 
<main> 
    <Champion> 
    <Name>Aatrox</Name> 
    <Counter>Soraka</Counter> 
    </Champion> 
    <Champion>  
    <Name>Ahri</Name> 
    <Counter>Diana</Counter>  
    </Champion> 
</main> 

我想,每当我按下按钮,读取名称和计数器。每次新的一个(第一个按钮 - 第一个冠军等)。

有人可以帮助我吗?另外,对代码的一点解释会很好,如果有很多循环和东西,我仍然有很多东西需要学习。

+0

感谢您编辑代码:) – Xzenon

+0

为什么要使用XmlReader?尝试LINQ to XML(XDocument)。 –

回答

1

您的内容可能会发现使用比XmlReader更高级别的接口更容易。例如,你可以在Linq的如下这样对XML:

// read in the entire document 
var document = XDocument.Load("ChampionsList.xml"); 

// parse out the relevant information 
// start with all "Champion" nodes 
var champs = documents.Descendants("Champion") 
    // for each one, select name as the value of the child element Name node 
    // and counter as the value of the child element Counter node 
    .Select(e => new { name = e.Element("Name").Value, counter = e.Element("Counter").Value }); 

// now champs is a list of C# objects with properties name and value 

foreach (var champ in champs) { 
    // do something with champ (e. g. MessageBox.Show) 
} 
+0

更改'后代(“Name”)。Single()'到'元素(“名称”),我会上投票,并且也''计数器'。 –

+0

@ChuckSavage很好的通话。我做了更改 – ChaseMedallion

+0

非常感谢,它的工作:)后裔之间有什么区别()Single()和Element()? – Xzenon

1

为了测试XML有效性,我发现将文件的扩展名设置为.XML然后将其放到Internet Explorer窗口上非常简单。 Internet Explorer内置了一个相当不错的XML查看器,它会让你知道是否有错误。

(编辑:删除有关呈现XML是无效的具体建议 - 这似乎已被标记方面的问题引起的。)

+0

你确定你的说法吗? – rene

+0

当我回答时,XML看起来不同。除了在Internet Explorer中检查有效性的提示之外,现在这个答案还没有那么有用。 – StilesCrisis

+0

我只确保根标签出现...我没有添加或删除任何标签...您的回答让我开始编辑问题... – rene

1

使用ReadElementContentAsString获得元素

XmlReader reader = XmlReader.Create("ChampionList.xml"); 

reader.ReadToFollowing("Name"); // read until element named Name 
string nume = reader.ReadElementContentAsString(); // read its content 
MessageBox.Show(nume); 
0

你为什么不读他们列出一次,当过按下按钮只是从你的列表中冒了出来。 XmlTextReader reader = new XmlTextReader(“yourfile.xml”);

  string elementName = ""; 

      List<string[]> Champion = new List<string[]>(); 
      string name = "";    

      while (reader.Read()) // go throw the xml file 
      { 

       if (reader.NodeType == XmlNodeType.Element) //get element from xml file 
       { 

        elementName = reader.Name; 
       } 
       else 
       { 

        if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue)) //fet the value of element 
        { 
         switch (elementName) // switch on element name weather Name or Counter 
         { 
          case "Name": 
           name = reader.Value; 
           break; 
          case "Counter": 
           string[] value = new string[] { name, reader.Value }; //store result to list of array of string 
           Champion.Add(value); 
           break; 

         } 
        } 
       } 
      }