【问题标题】:How to get XDocument child node如何获取 XDocument 子节点
【发布时间】:2016-02-24 18:52:51
【问题描述】:

<Users>
  <Account>
    <User>
      <Username>AdminUser</Username>
      <Password>pass123</Password>
      <Active>true</Active>
      <Account>Admin</Account>
      <Details>
  	<Account>xyz</Account>
      </Details>
    </User>   
  </Account>
 <Account>
    <User>
      <Username>AdminUser</Username>
      <Password>pass123</Password>
      <Active>true</Active>
      <Account>Admin</Account>
      <Details>
  	<Account>xyz</Account>
      </Details>
    </User>   
  </Account>
 <Account>
    <User>
      <Username>AdminUser</Username>
      <Password>pass123</Password>
      <Active>true</Active>
      <Account>Admin</Account>
      <Details>
  	<Account>xyz</Account>
      </Details>
    </User>   
  </Account>
</Users>

反序列化后,我得到了如上所示的 XDocument。 “Account”节点有同名的子节点,即Account。如何获取“Users”节点的所有子节点意味着我想在“Users”节点下获得三个“Account”节点。

【问题讨论】:

标签: c# xml


【解决方案1】:
IEnumerable<XElement> accounts = doc.Root.Elements("Account");

在此示例中,Accounts 是唯一的直接子级,您可以使用 this overload

IEnumerable<XElement> accounts = doc.Root.Elements();

你应该使用XContainer.Elements("name") 来获取直接子元素,或者XContainer.Descendants("name") 如果你想获取所有同名的嵌套元素。

【讨论】:

    【解决方案2】:
     XDocument doc = XDocument.Load(path);
            foreach (XElement element in doc.Root
                                  .Element("Account")
                                  .Elements("User"))
            {
                Console.WriteLine("Username: {0}; Password: {1}; Active:{2}; Account: {3}; Details Account: {4}",
                                  (string)element.Element("Username"),
                                  (string)element.Element("Password"),
                                  (string)element.Element("Active"),
                                  (string)element.Element("Account"),
                                  (string)element.Element("Details").Element("Account"));
            }
    

    【讨论】:

      【解决方案3】:

      如果我理解正确,请尝试使用Xpath Query(已测试并通过)

          var xml_string = "<Users>  <Account>    <User>      <Username>AdminUser</Username>      <Password>pass123</Password>      <Active>true</Active>      <Account>Admin</Account>      <Details>    <Account>xyz</Account>      </Details>    </User>     </Account> <Account>    <User>      <Username>AdminUser</Username>      <Password>pass123</Password>      <Active>true</Active>      <Account>Admin</Account>      <Details>      <Account>xyz</Account>      </Details>    </User>     </Account> <Account>    <User>      <Username>AdminUser</Username>      <Password>pass123</Password>      <Active>true</Active>      <Account>Admin</Account>      <Details>      <Account>xyz</Account>      </Details>    </User>     </Account></Users>";
      
          var xmlNodes = xml.SelectNodes("Users/Account/User");
      
          foreach (XmlNode node in xmlNodes)
          {
            Console.WriteLine("Username: {0}; Password: {1}; Active:{2}; Account: {3}; Details Account: {4}",
                                      node["Username"].InnerText,
                                      node["Password"].InnerText,
                                      node["Active"].InnerText,
                                      node["Account"].InnerText,
                                      node["Details"].InnerText);
          }
      
        //result is
      
         // Username: AdminUser; Password: pass123; Active:true; Account: Admin; Details Account: xyz
         // Username: AdminUser; Password: pass123; Active:true; Account: Admin; Details Account: xyz
        // Username: AdminUser; Password: pass123; Active:true; Account: Admin; Details Account: xyz"
      

      Account节点下获取3个User节点

      或者这个:获取Users/Account下的3个Account节点

                  var xml = new XmlDocument();
      
                  xml.LoadXml(xml_string);
      
                  var xmlNodes = xml.SelectNodes("Users/Account/User/Account");
      
                  foreach (XmlNode node in xmlNodes)
                  {
                     Console.WriteLine(node.InnerText);
                  }
      
                 //result is 
      
                  //Admin
                  //Admin
                  //Admin
      

      【讨论】:

        猜你喜欢
        • 2013-04-19
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        相关资源
        最近更新 更多