按名称获取XML Element及其子级,然后获取这些子级的值

时间:2015-07-27 02:44:24

标签: c# xml

我刚开始使用xml,它开始让我感到沮丧的是,做我需要的东西是多么困难,而我在google上找到的所有内容都无效。

<Player>
<Name>PoopNUG</Name>
<PlayerTag>DANKMEMES</PlayerTag>
<StartStats>
  <StartNum>2</StartNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</StartStats>
<CurrentStats>
  <CurrentNum>3</CurrentNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</CurrentStats>

这是我正在使用的xml的一个例子。文件中有很多玩家。我需要按名称找到一个玩家,然后访问该玩家的孩子,并按要素名称进行操作。

我可以使用以下方法提取正确的元素:

IEnumerable<XElement> myPlayers =
            from myP in pElements.Elements("Player")
            where (string)myP.Element("Name") == pNameCombo.SelectedItem.ToString()
            select myP;

但在那之后,我迷失了。我在谷歌上找到的方法可能已经尝试了20种方法,并且没有任何方法可以获取myPlayers中的数据。我可以打印出整个内容,但不能按名称和这些元素的值访问单个元素。

任何帮助?

2 个答案:

答案 0 :(得分:0)

我没有运行代码,但你可以尝试这样的东西来根据元素名称和属性名称的值搜索你的元素。当然你也可以直接使用LINQ

XElement Root = System.Xml.Linq.XElement.Load("MyFile.xml");
foreach(XElement ChildOfRoot in Root.Elements())
{
     //loop for eleemnt name player/Player
     if(ChildOfRoot.Name.LocalName.ToLower() == "player")
     {
         //compare the of the player.
         if(ChildOfRoot.Attribute("Name").Value == "MyName")
         {
             //once you found the player, loop thorugh its children
              foreach(XElement ChildOfPlayer in ChildOfRoot.Elements())
              {

                      //read the value of child nodes here
               }
               break;
           }
       }
    }

答案 1 :(得分:0)

这个适合我

XElement xmlDoc = XElement.Load(@"C:\Users\username\Desktop\Noname1.xml");

        IEnumerable<XElement> myPlayers = from myP in xmlDoc.Elements("Player")
                                          where (string)myP.Element("Name") == "PoopNUG"
                                          select myP;

        foreach (XElement player in myPlayers)
        {
            string name = player.Element("Name").Value;
            string tag = player.Element("PlayerTag").Value;
        }

和xml文件是

<?xml version="1.0" encoding="utf-8"?>
<root>
<Player>
<Name>PoopNUG</Name>
<PlayerTag>DANKMEMES</PlayerTag>
<StartStats>
  <StartNum>2</StartNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</StartStats>
<CurrentStats>
  <CurrentNum>3</CurrentNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</CurrentStats>
</Player>
<Player>
<Name>PoopNUG</Name>
<PlayerTag>DANKMEMES</PlayerTag>
<StartStats>
  <StartNum>2</StartNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</StartStats>
<CurrentStats>
  <CurrentNum>3</CurrentNum>
  <LastUpdated>2015-07-24T22:21:30.5463885-05:00</LastUpdated>
</CurrentStats>
</Player>
</root>