2011-12-25 3 views
4

Предположим, что XmlDocument успешно загружен с этим кодом:Как получить XML-элементы из объекта XmlDocument?

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

Это образец часть потока XML (полный поток XML имеет около 10000 из ProductTable в):

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

Использование Linq , как я могу получить доступ к элементам ProductName и Price? Благодарю.

ответ

8

Я предлагаю использовать XDocument вместо XmlDocument (последний не подходит для 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

Большое спасибо , codeparkle. Я собираюсь попробовать это позже сегодня вечером, когда я вернусь домой. Я посещаю семью 25 декабря, поэтому могу только прочитать ваш ответ, не имея возможности проверить. – user763554

+0

codeparkle: Вы абсолютный гений! Ваш код работает отлично. Спасибо!!! – user763554

Смежные вопросы