2011-12-25 18 views
4

がXmlDocumentオブジェクトが正常にこのコードをロードされると仮定します。これは、XMLストリームのサンプル部分であるXmlDocumentオブジェクトからXML要素を取得する方法は?

var doc = new XmlDocument(); 
doc.Load(stream); 

(完全なXMLストリームは、およそ10000 ProductTableののがあります):

<ProductTable> 
<ProductName>Chair</ProductName> 
<Price>29.5</Price> 
</ProductTable> 

のLINQを使用してどのようにしてProductNameとPriceエレメントにアクセスできますか?ありがとう。

答えて

8

XmlDocumentの代わりにXDocumentを使用することをお勧めします(後者はLINQ to XMLには適していません)。 XDocument.Load(...)メソッドを使用して、「実際の」XMLを読み込みます。

string xml = @"<ProductTable> 
<ProductName>Chair</ProductName> 
<Price>29.5</Price> 
</ProductTable>"; 
XDocument x = XDocument.Parse(xml); 
var tables = x.Descendants("ProductTable"); 
Dictionary<string,string> products = new Dictionary<string, string>(); 
foreach (var productTable in tables) 
{ 
    string name = productTable.Element("ProductName").Value; 
    string price = productTable.Element("Price").Value; 
    products.Add(name, price); 
} 

あなたは構文のように砂糖でコーティングされたSQLを使用することを好むだろうか、話題をよく読んしたい場合は、this MSDN articleが開始するのに最適な場所です。

あなたがanonymous typeを使用してのように感じる場合は、次はより簡潔なバージョンです:

XDocument document = XDocument.Parse(xml) 
var products = /* products is an IEnumerable<AnonymousType> */ 
    from item in document.Descendants("ProductTable") 
    select new 
    { 
     Name = item.Element("ProductName").Value, 
     Price = item.Element("Price").Value 
    }; 

あなたは、コンソールで試合を印刷するには、この表情豊かな構文を使用することができます。

foreach (var product in products) /* var because product is an anonymous type */ 
{ 
    Console.WriteLine("{0}: {1}", product.Name, product.Price); 
} 
Console.ReadLine(); 
+0

本当にありがとうございました、コードパーク。私は今夜​​、家に帰るときにそれを試してみるつもりです。私は12月25日に家族を訪問しているので、テストすることができなくてもあなたの答えを読むことができます。 – user763554

+0

codesparkle:あなたは絶対天才です!あなたのコードは完全に機能します。本当にありがとう!!! – user763554

関連する問題