парсинг XML с использованием linq в xml - PullRequest
1 голос
/ 14 декабря 2011

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

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Вам необходимо загрузить 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 голосов
/ 14 декабря 2011

Что-то вроде

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...