如何选择一个特定节点LINQ到XML [英] How to select a specific node with LINQ-to-XML

查看:82
本文介绍了如何选择一个特定节点LINQ到XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



但我怎么选择客户节点,在ID = 2?

 的XDocument xmlDoc中=新的XDocument(
新XDeclaration(1.0,UTF-8,是),
新XComment(这些都是客户从数据库转移),
新的XElement(客户,
新的XElement(客户,
新XAttribute( ID,1),
新的XElement(全名,吉姆测试),
新的XElement(标题,开发),
新的XElement(「本公司」, 苹果公司)

新的XElement(客户,
新XAttribute(ID,2),
新的XElement(全名,约翰· Testly),
新的XElement(标题,测试),
新的XElement(本公司,谷歌)


) ;

的XElement elementToChange = xmldoc.Element(客户)元素(客户)元素(「本公司」)。
elementToChange.ReplaceWith(新的XElement(本公司,新公司的价值......));



答:



谢谢你们,为记录,这里是确切的语法搜索出该公司的元素在客户与-ID-2元,然后更改公司元素的唯一值:

 的XElement elementToChange = xmldoc.Element(客户)
.Elements(客户)
。单(X =>(INT)x.Attribute( ID)== 2)
.Element(「本公司」);
elementToChange.ReplaceWith(
新的XElement(本公司,新公司的价值...)
);



与方法的语法回答:



刚在方法的语法理解了它,以及:

 的XElement elementToChange =(从C中xmldoc.Element(客户)
.Elements(客户)
,其中(INT)c.Attribute(ID)== 3
选择C)。单()元(「本公司」)。


解决方案

假设ID是唯一的:

  VAR的结果= xmldoc.Element(客户)
.Elements(客户)
。单(X = >(?INT)x.Attribute(ID)== 2);

您也可以使用首先 FirstOrDefault 的SingleOrDefault 其中,,而不是不同的情况。


I can select the first customer node and change its company name with the code below.

But how do I select customer node where 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..."));

ANSWER:

Thanks guys, for the record, here is the exact syntax to search out the company element in the customer-with-id-2 element, and then change only the value of the company element:

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

ANSWER WITH METHOD SYNTAX:

Just figured it out in method syntax as well:

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

解决方案

Assuming the ID is unique:

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

You could also use First, FirstOrDefault, SingleOrDefault or Where, instead of Single for different circumstances.

这篇关于如何选择一个特定节点LINQ到XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆