2014-12-09 2 views
0

Я разбираюсь в XML-документе, и мне нужно получить значение элемента Property. На данный момент у меня есть строка кода, которая возвращает это:Как получить значение XElement

<Property name="ID" value="thevalueineed"/> 

Вот моя строка используемого кода.

var ID = from el in linkedinfo.DescendantsAndSelf("Property") 
     where (string)el.Attribute("name") == "ID" 
     select el.Attributes("value").ToString(); 

Что будет следующим шагом я пропускаю, что я мог бы получить thevalueineed от этого элемента, что я имею в var ID?

ответ

5

Просто измените ваш select как

select (string)el.Attribute("value") 

рабочий код.

var xDoc = XDocument.Parse(@"<root><Property name=""ID"" value=""thevalueineed""/></root>"); 

var ID = from el in xDoc.Root.DescendantsAndSelf("Property") 
      where (string)el.Attribute("name") == "ID" 
      select (string)el.Attribute("value"); 

var val = ID.First(); 
+0

Я сделал, как вы сказали, и он не возвращает правильное значение. Вместо этого он возвращает '[0] =" System.Xml.Linq.XElement + d__0 "' – scapegoat17

+0

Вы уверены, что изменили Атрибут (ы) на Атрибут? –

+0

@ Selman22 - Я этого не делал. Я сейчас проверяю. – scapegoat17

0

Это должно работать

var ID = from el in linkedinfo.Descendants("Property") 
     where el.Attribute("name").Value == "ID" 
     select el.Attribute("value").Value; 
+0

' .Value' не был использован ... – scapegoat17

+0

Изменен. –

0

Я лично использую .Value вместо литья в строку:

XElement linkedTeethInfo = XElement.Parse(@"<Property name=""ID"" value=""thevalueineed""/>"); 

var ID = from el in linkedTeethInfo.DescendantsAndSelf("Property") 
    where el.Attribute("name").Value == "ID" 
    select el.Attribute("value").Value; 

Console.WriteLine("ID: {0}", ID.First()); 

создал небольшой скрипку здесь: https://dotnetfiddle.net/mrSITM

+0

'Я бы лично использовал. Значение вместо того, чтобы кастинг в строку' Почему? если атрибут 'value' не существует, он будет генерировать исключение, скрывая, где вы получите эту ошибку. Кастинг вернет значение null. – EZI

+0

Действительная точка. Кастинг может вас сэкономить, но в зависимости от требований, которые вы предпочли бы иметь Exception, тогда «тихий» переход на другой ресурс – fguchelaar

0

Я лично, как это метод при чтении файлов XML, но я не знаю, если он wi Я буду работать с вашим XML-файлом.

// Create a DataSet 
DataSet ds = new DataSet(); 

// Get the data from the XML file 
ds.ReadXml("C:\\myXMLFile.xml"); 

// Get values 
foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
    string value = dr["ID"].ToString(); 
} 
0
select el.Attributes("value") 

возвращает предустановленный вариант

System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Xml.Linq.XElement,System.Collections.Generic.IEnumerable<System.Xml.Linq.XAttribute>> 

Попробуйте это:

var ID = element.DescendantsAndSelf("Property").Where(x => x.Attribute("name").Value == "id").Select(x => x.Attribute("value")).First(); 
Смежные вопросы