使用LINQ解析XML到XML

问题描述:

我想解析一些使用LINQ到XML的大型XML文件,但我不知道我该怎么做。 我想读取<dac>标签后面的所有<name>标签。我必须提到我在XMl文件中有许多<name>标记,我只想读取<dac>之后的标记。我怎样才能做到这一点使用LINQ到XML?使用LINQ解析XML到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

你想在'dac`标签中的*或*之后加上`name`标签吗? – 2011-12-14 10:38:23

+2

您发布了无效的XML。请纠正它。 – adatapost 2011-12-14 10:39:35

您需要加载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); 

喜欢的东西

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

这是假定每个<dac>包含至多1 <name>元素。