如何遍历XDocument的节点

Ed *_*d R 25 .net c# xml linq sorting

我试图遍历我的xml文档的节点,以获取<username>Ed</username>每个节点的值.我使用Linq首先对XDocument进行排序,然后尝试循环遍历节点.我似乎无法找到正确的foreach循环来实现这一目标.任何帮助表示赞赏.

var doc = XDocument.Load("files\\config.xml");
var newDoc = new XDocument(new XElement("Config",
            from p in doc.Element("Config").Elements("Profile")
            orderby int.Parse(p.Element("order").Value)
            select p));


foreach (XElement xe in newDoc.Nodes())
{
    MessageBox.Show(xe.Element("username").Value);
}

// XML document
<Config>
<Profile>
    <id>Scope</id>
    <username>Scope 1</username>
    <password>...</password>
    <cdkey>0000</cdkey>
    <expkey></expkey>
    <cdkeyowner>Scope</cdkeyowner>
    <client>W2BN</client>
    <server>[IP]</server>
    <homechannel>Lobby</homechannel>
    <load>1</load>
    <order>2</order>
</Profile>
<Profile>
    <id>Scope 2</id>
    <username>Scope 2</username>
    <password>...</password>
    <cdkey>0000</cdkey>
    <expkey></expkey>
    <cdkeyowner>Scope</cdkeyowner>
    <client>W2BN</client>
    <server>[IP]</server>
    <homechannel>Lobby</homechannel>
    <load>1</load>
    <order>1</order>
</Profile>
</Config>
Run Code Online (Sandbox Code Playgroud)

Joh*_*han 46

试试这个.不确定为什么你需要第二个doc.

foreach (XElement xe in doc.Descendants("Profile"))
{
    MessageBox.Show(xe.Element("username").Value);
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*der 5

使用 XPathDocument 和 XPath 表达式更容易。

var doc = new XPathDocument("files\\config.xml")
foreach (var username in doc.CreateNavigator().Select("//username")
{
    ...
}
Run Code Online (Sandbox Code Playgroud)