Чтение 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 для этого и нескольких других 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 приведет к загрузке всего документа в ОЗУ, что может привести к проблемам с производительностью. 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