使用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>
答
您需要加载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>
元素。
你想在'dac`标签中的*或*之后加上`name`标签吗? – 2011-12-14 10:38:23
您发布了无效的XML。请纠正它。 – adatapost 2011-12-14 10:39:35