1
 <root>
    <level1>
        <item id="1" date="" name="" >
        <item id="2" date="" name="" >
        <item id="3" date="" name="" >
        <item id="4" date="" name="" >
        <item id="5" date="" name="" >
    </level1>
 </root>

私は上記のようなxml構造を持っています。

使用しました

XmlNodeList xnList = xmlDoc.SelectNodes("/level1");

上記のようにxmlnodelistを使用した場合、id = "3"の要素のみを具体的に取得するにはどうすればよいですか?

または、すべての要素をxnlistの要素として内部に格納できるとしたらもっと便利ですか?

4

2 に答える 2

2
XmlNodeList xnList = xmlDoc.SelectNodes("//level1/item[@id='3']");

LinqToXmlを使用する場合

var xDoc = XDocument.Parse(xmlstring); // XDocument.Load(filename)
var items = xDoc.Descendants("level1")
                .First()
                .Elements("item")
                .Select(item => new { 
                                    ID = item.Attribute("id").Value, 
                                    Name = item.Attribute("name").Value 
                                })
                .ToList();

XPathとLinq2Xmlを組み合わせることもできます

var item2 = xDoc.XPathSelectElements("//level1/item")
                .Select(item => new { 
                                    ID = item.Attribute("id").Value, 
                                    Name = item.Attribute("name").Value 
                                })
                .ToList();
于 2012-11-29T21:03:22.650 に答える
2

@LBからのすばらしい回答に加えて、私もLinqを使用していますが、個人的にはもっと読みやすいと思います。

xdoc.Element("level1")
    .Descendants("item")
    .Where(x => x.Attribute("id").Value == "3").First();

しかし、それはすべてあなたのスタイルに依存します;)

于 2012-11-29T21:13:32.453 に答える