簡體   English   中英

如何獲得XDocument子節點

[英]How to get XDocument child node

 <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。 “帳戶”節點具有相同名稱的子節點,即“帳戶”。如何獲取“用戶”節點的所有子節點意味着我要在“用戶”節點下獲得三個“帳戶”節點。

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

在此示例中, Account是唯一的直接子級,可以使用以下重載

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

如果要獲取具有相同名稱的所有嵌套元素,則應使用XContainer.Elements("name")獲取直接子XContainer.Descendants("name") ,或使用XContainer.Descendants("name")

如果我正確理解,請嘗試使用Xpath查詢 (已測試並通過)

    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
 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"));
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM