2013-08-13 4 views
0

Мне нужно получить значение элемента SubTopic, который имеет attribute под названием «Имя» с определенным значением. Я делаю это так;Получить элемент xml с определенным значением атрибута в C#

IEnumerable<XElement> list = 
     (from el in xdoc.Elements() 
     where (string)el.Attribute("Name") == "creatingTests" 
     select el); 

В коллекции есть нулевые элементы.

Я попытался поставить xdoc.Elements("SubTopic") вместо пустого параметра, но без успеха.

My XML file structure;

<?xml version="1.0" encoding="windows-1250" ?> 
    <Help Title="TestTool - tematy pomocy"> 
    <Topic Name="creatingTests" Title="Tworzenie testów"> 
     <SubTopic Name="saveload" Title="Zapis i odczyt z pliku"> 
      Content 
     </SubTopic> 
    </Topic> 
    </Help> 

Как я могу получить это значение справки/темы (Name = "creationTests")?

xdoc, конечно, XDocument объект с загруженным xml и содержимым моего файла.

ответ

3

xdoc.Elements() возвращает только один элемент - корень XML дерева (это <Help> элемент в вашем примере

Измените свой запрос на:

IEnumerable<XElement> list = 
    (from el in xdoc.Root.Elements() 
    where (string)el.Attribute("Name") == "creatingTests" 
    select el); 

Он возвращает коллекцию с одним элементом Используйте First или FirstOrDefault.. чтобы получить его как отдельный товар, а не сбор:

XElement item = (from el in xdoc.Root.Elements() 
       where (string)el.Attribute("Name") == "creatingTests" 
       select el).FirstOrDefault(); 
0

Вот альтернатива, используя System.Xml.XPath:

using System.Xml.Linq; 
using System.Xml.XPath; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var xdoc = XDocument.Load("input.xml"); 
     var subTopic = xdoc 
      .XPathSelectElement("//Topic[@Name='creatingTests']/SubTopic"); 
    } 
} 
0

Очень легкий и простой способ заключается в использовании XSLT ..

1 . Создайте шаблон XSLT.

2.Call it in C#.

xmlDaynamic.DocumentContent = "Your XML Input"; 
xmlDaynamic.TransformSource = "YourTemplate with extension"; 

3.Наша задача выполнена.

4.xmlDaynamic - это серверное управление.

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