[英]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.