当前位置:  开发笔记 > 编程语言 > 正文

如何使用LINQ-to-XML选择特定节点

如何解决《如何使用LINQ-to-XML选择特定节点》经验,为你挑选了1个好方法。

我可以选择第一个客户节点并使用下面的代码更改其公司名称.

但是如何选择ID = 2的客户节点?

    XDocument xmldoc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XComment("These are all the customers transfered from the database."),
        new XElement("Customers",
            new XElement("Customer",
                new XAttribute("ID", 1),
                new XElement("FullName", "Jim Tester"),
                new XElement("Title", "Developer"),
                new XElement("Company", "Apple Inc.")
                ),
            new XElement("Customer",
                new XAttribute("ID", 2),
                new XElement("FullName", "John Testly"),
                new XElement("Title", "Tester"),
                new XElement("Company", "Google")
                )
            )
        );

    XElement elementToChange = xmldoc.Element("Customers").Element("Customer").Element("Company");
    elementToChange.ReplaceWith(new XElement("Company", "new company value..."));

回答:

谢谢大家,为了记录,这里是在customer-with-id-2元素中搜索company元素的确切语法,然后只更改company元素的值:

XElement elementToChange = xmldoc.Element("Customers")
    .Elements("Customer")
    .Single(x => (int)x.Attribute("ID") == 2)
    .Element("Company");
elementToChange.ReplaceWith(
    new XElement("Company", "new company value...")
    );

用方法语法答案:

刚刚在方法语法中弄清楚了:

XElement elementToChange = (from c in xmldoc.Element("Customers")
                                .Elements("Customer")
                            where (int)c.Attribute("ID") == 3
                            select c).Single().Element("Company");

Mehrdad Afsh.. 46

假设ID是唯一的:

var result = xmldoc.Element("Customers")
                   .Elements("Customer")
                   .Single(x => (int?)x.Attribute("ID") == 2);

你也可以使用First,FirstOrDefault,SingleOrDefaultWhere,而不是Single针对不同情况.



1> Mehrdad Afsh..:

假设ID是唯一的:

var result = xmldoc.Element("Customers")
                   .Elements("Customer")
                   .Single(x => (int?)x.Attribute("ID") == 2);

你也可以使用First,FirstOrDefault,SingleOrDefaultWhere,而不是Single针对不同情况.


你在源代码上有"使用System.Linq"吗?
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有