Четене на XML файл, за да получите всички дъщерни възли

Имам XML файл, който е подобен на този по-долу. В момента, ако искам да променя стойности, трябва да вляза в XML и да променя/добавя/премахвам записи според изискванията.

<configuration>
    <locations>
        <add key="1234" type="Type1" location="Default Location 1" value="10"/>
        <add key="4567" type="Type2" location="Default Location 1" value="13"/>
        <add key="7890" type="Type1" location="Default Location 2" value="17"/>
    </locations>
</configuration>

Пиша Windows Form GUI за този и няколко други XML, които софтуерът използва. Мога да получа/поставя настройки в другите XML файлове, тъй като имат имена на възли, но този файл (когато е създаден първоначално) е направен по различен начин.

Трябва да получа всеки ред като низ, за ​​да мога след това да го разделя и да покажа това, което ми трябва на екрана (ключ/тип/местоположение/стойност). След това трябва да актуализирам файла с информацията, когато се актуализира.

Търся малко помощ за:

  • извличане на всички атрибути на възел в рамките на <locations>

  • изчистване на всички възли в рамките на <locations> и след това добавяне на възлите с атрибути обратно в, така че да се вземат предвид всички евентуални случаи (премахнати/добавени/актуализирани записи) и т.н.


person Paul Stringer    schedule 18.09.2014    source източник
comment
Здравейте, това са страниците, които разгледах досега, може да се окаже, че една от тях има отговора, но имам ограничени познания и все още научавам части и части в момента: stackoverflow.com/questions/2915294/ stackoverflow.com/questions/ 11993857/ stackoverflow.com/questions/1600065/ csharp-examples.net/xml-nodes-by-attribute-value   -  person Paul Stringer    schedule 18.09.2014


Отговори (3)



Можете да използвате XmlReader да свърши работата вместо вас.

Нещо като това;

        XmlReader reader = new XmlReader(filepath)

        string s = "";

        while(reader.Read())
        {
              if(reader.HasAttributes)
              {
               s  = reader["attributename"].Value;
              }
         }

Не мога да обещая, че ще се компилира, тъй като го написах от телефона си.

След това можете да използвате съхранените стойности и да използвате XmlWriter за запис на данните във файл.

Бих искал също да отбележа, че ако работите с много данни, XmlReader вероятно е правилният начин. Използването на XmlDocument ще зареди целия документ в RAM, което може да доведе до проблеми с производителността. XmlReader ще предава поточно данните, използвайки много по-малко памет, отколкото XmlDocument някога ще направи.

person Dion V.    schedule 18.09.2014
comment
ще опитам, благодаря и за информацията за XMLReader!! високо оценен - person Paul Stringer; 18.09.2014
comment
Тъй като не отговорих напълно на въпроса ви, добавих и връзка към XmlWriter, която трябва да ви помогне да запишете данните във файл. Радвам се, че мога да помогна :) - person Dion V.; 18.09.2014

Предлагам ви просто да използвате класа XmlSerializer в пространството от имена System.Xml.Serialization. Можете да използвате атрибута microsoft define. След това можете лесно да сериализирате и десериализирате XML към вашата структура или клас.

person alking    schedule 18.09.2014