Как получить элементы XML из объекта XmlDocument? - PullRequest
5 голосов
/ 26 декабря 2011

Предположим, что XmlDocument успешно загружен с этим кодом:

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

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

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

Как использовать Linq, как получить доступ к элементам ProductName и Price?Спасибо.

1 Ответ

9 голосов
/ 26 декабря 2011

Я предлагаю использовать 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-синтаксис с сахарным покрытием или хотите прочитать тему, thisMSDN * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [*] тогда, когда вы хотите использовать анонимный тип :

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...