разбирать XDocument для атрибутов - PullRequest
1 голос
/ 16 декабря 2010

Я попытался проанализировать XML-файл следующим образом:

<books>
   <book>
      <attr name="Moby Dick">Moby Dick is a classic</attr>
      <attr isbn="isbnNumber">123456789</attr>
   </book>
</books>

Как я могу получить значение "123456789"?Мне не нужен первый атрибут.

Я пытался читать их в цикле foreach, получая XElements, но продолжаю получать исключение объекта NULL.

foreach(XElement xe in XDoc.Attribute("attr"))
{
   string str = xe.Attribute("isbnNumber").Value   // NULL EXCEPTION HERE
} 

Заранее спасибо ...

Ответы [ 3 ]

2 голосов
/ 16 декабря 2010

Вы можете попробовать использовать метод расширения XPathSelectElement() [вам понадобится System.Xml.XPath для их получения].

Например

var isbn = xDoc.XPathSelectElement("//book/attr[@isbn='isbnNumber']").Value

PSХороший тестер XPath находится по адресу: http://www.yetanotherchris.me/home/2010/6/7/online-xpath-tester.html

1 голос
/ 16 декабря 2010

123456789 на самом деле является значением элемента, а не атрибута. То, что вы хотите, можно сделать так:

XElement attr = xDoc.Descendants("attr")
                    .FirstOrDefault( x=> 
                        (string)x.Attribute("isbn") == "isbnNumber"
                    );

string isbn = (string)attr;

Вы могли бы даже сделать это одной строкой, но это будет легче читать, если вы новичок в LINQ to XML.

0 голосов
/ 16 декабря 2010

Ну, я не могу понять, как реагировать на индивидуальные ответы ..... но я реализовал их оба, и они оба работают.

Я согласен с ответом Reddog, поскольку он немного более прост, и, будучи новичком в LINQ, на данный момент он является самым простым для удобства чтения.

Спасибо за ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...