2010-07-19 5 views
0

Мой вопрос часто задают в нескольких местах, но у меня есть xml без атрибутов, поэтому я не могу использовать эти методы. структура моего XML заключается в следующем:Выберите элементы первого узла XML (linq, C#)

<offers> 
<offer> 
    <seller> 
     <citizen> 
     <name>A name</name> 
     <id>An ID</id> 
     </citizen> 
    </seller> 
    <amount>Number</amount> 
    <exchange-rate>Rate</exchange-rate> 
    </offer> 
. 
. 
. 
    <offer>.... 
    </offer> 
</offers> 

мне удалось заполнить многоколоночном ListView с этим кодом:

var offers = from o in loaded.Elements("offers").Elements("offer") select o; 
    foreach (var vmi in offers) 
      { 
       ListViewItem item = new ListViewItem(); 
       item = lista1.Items.Add(vmi.Descendants("name").First().Value); 
       item.SubItems.Add(vmi.Element("amount").Value); 
       item.SubItems.Add(vmi.Element("exchange-rate").Value); 
      } 

Но теперь, мне нужно выбрать данные, s (название, количество, обменно скорость) между первым <offer></offer>

Не могли бы вы предоставить код для этого на C#? Я попробовал FirstNode или First(), но я застрял. Заранее спасибо!

ОБНОВЛЕНИЕ! Я забыл упомянуть, что знак гражданина может варьироваться в xml. Это гражданин или компания. Вот почему я использовал метод Descendants. Но если вы можете показать мне лучший способ, чтобы справиться с этим. Буду премного благодарен.

ответ

1
var firstOffer = loaded.Element("offers").Element("offer"); 
var name = firstOffer.Element("seller").Element("citizen").Element("name").Value; 
var id = firstOffer.Element("seller").Element("citizen").Element("id").Value; 
var amount = firstOffer.Element("amount").Value; 
var exchangeRate = firstOffer.Element("exchange-rate").Value; 
+0

Я забыл упомянуть, что гражданин тег может варьируя в XML. Это гражданин или компания. Вот почему я использовал метод Descendants. Но если вы можете показать мне лучший способ, чтобы справиться с этим. Буду премного благодарен. КПП. код, который вы недавно отправили, с моим небольшим изменением (var name = firstOffer.Descendants («name»). First(). Value;) дает ошибку во время выполнения. NullreferenceException в первой строке. Поэтому я удалил часть: .Element ("предлагает"), затем ошибка указывает на строку с методом Descendants. Надеюсь, я понимаю: S – speter

+0

Я ошибся, загрузив xml-файл, поэтому он не сработал. Правильный код ниже. – speter

0
XElement xml = XElement.Load(xmlAddress); 
var first = xml.Element("offer"); 
var name = first.Descendants("name").First().Value; 
var amount = first.Element("amount").Value; 
var exchangeRate = first.Element("exchange-rate").Value; 
Смежные вопросы