2011-12-14 3 views
1

Я хочу проанализировать некоторый большой XML-файл, используя linq для XML, но я не знаю, как именно я могу это сделать. Я хочу прочитать все теги <name>, которые приходят после <dac> тег. Я должен упомянуть, что у меня есть много тегов <name> в файле XMl. Я просто хочу прочитать, что он приходит после <dac>. Как это сделать, используя linq для xml?разбор XML с использованием linq для xml

Вот простой пример из моего файла XML:
Я хочу, чтобы код вернуть мне такое значение: (SSS, HHH, HHH Panel)

<?xml version="1.0" encoding="UTF-8"?> 

<installationTree> 
    <folder> 
    <id>1</id> 
    <name>Company</name> 
    <full-path>Door List/Company</full-path> 
    <nodes> 
     <controller> 
     <id>9</id> 
     <name>9016 Panel</name> 
     <description/>   
     <full-path>Door List/Company/9016 Panel</full-path> 
     <nodes> 
      <dac> 
      <isOneDoorController>false</isOneDoorController> 
      <id>9</id> 
      <name>SSS</name> 
      <description/> 
      <address>1</address> 
      <active>true</active> 
      <externalId>ID:9_20111123_121106</externalId> 
      <mode>standard</mode>  

      <doorCodes/> 
      <full-path>Door List/Company/9016 Panel/SSS</full-path> 
      <nodes/> 
      </dac> 
      <dac> 
      <isOneDoorController>false</isOneDoorController> 
      <id>10</id> 
      <name>HHH</name> 
      <description/> 
      <address>2</address> 
      <active>true</active> 

      <doorCodes/> 
      <full-path>Door List/Company/9016 Panel/HHH</full-path> 
      <nodes/> 
      </dac> 
     </nodes> 
     </controller> 
     <oneDoorController> 
     <id>8</id> 
     <name>HHH Panel</name> 
     <description/> 
     <serialnumber>00:06:8e:30:24:24</serialnumber> 
     <timezone>Iran</timezone> 
     <active>true</active> 
     <docUpdater/> 
     <nodes> 
      <dac> 
      <isOneDoorController>true</isOneDoorController> 
      <id>8</id> 
      <name>HHH Panel</name> 
      <description/> 
      <address>1</address> 
      <active>false</active>    
      <doorCodes/> 
      </dac> 
      <full-path>Door List/Company/HHH Panel</full-path> 
      <nodes/> 
     </nodes> 
     </oneDoorController> 
    </nodes> 
    </folder> 
</installationTree> 
+0

Вы хотите, чтобы теги 'name' * после * или * внутри * теги' dac'? –

+2

Вы разместили недопустимый XML. Пожалуйста, исправьте это. – adatapost

+0

@ DanielHilgarth теги первого имени в блоке тегов dac – Am1rr3zA

ответ

3

Вам необходимо загрузить документ XML и написать инструкцию, предложенную @Henk Holterman.

string file = @"c:\file.xml"; 
XDocument doc = XDocument.Load(file); 
var names= doc.Root.Descendants("dac").Elements("name"); 

foreach (var t in names) 
    Console.WriteLine(t.Value); 
2

Что-то вроде

var names = doc.Root.Descendants("dac").Elements("name"); 

Это предполагает, каждый <dac> содержит не более 1 <name> элемент.

+0

+1 Потомки ("xxx") возвращают IEnumerable . – adatapost

+0

Вы можете написать полный код. – Am1rr3zA

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