50

以下のコードを使用して、最初の顧客ノードを選択し、その会社名を変更できます。

しかし、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");
4

2 に答える 2

48

ID が一意であると仮定します。

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

別の状況では、代わりにFirstFirstOrDefaultSingleOrDefaultまたはを使用することもできます。WhereSingle

于 2009-02-27T10:34:24.670 に答える
4

私は次のようなものを使用します:

dim customer = (from c in xmldoc...<Customer> 
                where c.<ID>.Value=22 
                select c).SingleOrDefault 

編集:

c# タグがありませんでした。申し訳ありません。例は VB.NET にあります。

于 2009-02-27T10:37:26.253 に答える