首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用LINQ- to -XML选择特定节点

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

Stack Overflow用户
提问于 2009-02-27 10:31:24
回答 2查看 109.8K关注 0票数 50

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

但是如何选择ID=2所在的customer节点?

代码语言:javascript
复制
    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元素的值:

代码语言:javascript
复制
XElement elementToChange = xmldoc.Element("Customers")
    .Elements("Customer")
    .Single(x => (int)x.Attribute("ID") == 2)
    .Element("Company");
elementToChange.ReplaceWith(
    new XElement("Company", "new company value...")
    );

使用方法语法回答:

我也是在方法语法中弄明白的:

代码语言:javascript
复制
XElement elementToChange = (from c in xmldoc.Element("Customers")
                                .Elements("Customer")
                            where (int)c.Attribute("ID") == 3
                            select c).Single().Element("Company");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-27 10:34:25

假设ID是唯一的:

代码语言:javascript
复制
var result = xmldoc.Element("Customers")
                   .Elements("Customer")
                   .Single(x => (int?)x.Attribute("ID") == 2);

对于不同的情况,您也可以使用FirstFirstOrDefaultSingleOrDefaultWhere,而不是Single

票数 48
EN

Stack Overflow用户

发布于 2009-02-27 10:37:26

我会使用类似这样的东西:

代码语言:javascript
复制
dim customer = (from c in xmldoc...<Customer> 
                where c.<ID>.Value=22 
                select c).SingleOrDefault 

编辑:

缺少c#标记,sorry......the示例在VB.NET中

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/594231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档