Конструирование XML на лету
От: prVovik Россия  
Дата: 02.04.07 07:54
Оценка: 116 (13)
Нередко встречаются задачи, где на лету надо програмно сконструировать XML документ (XmlDocument), или ветку (XmlElement). XML библиотека из фреймворка сконструирована так, что делать это, мягко говоря, неудобно. Приходится объявлять множество локальных переменных (для каждого атрибута, элемента, текстового узла и т.д.), придумывать всем этим переменным осмысленные и уникальные имена, а потом еще не забыть у всех узлов, имеющих детей нужным образом вызвать метод AppendChild(). Тут сложно не запутаться, код получается очень "муторным", многословным, со множеством временных локальных переменных. Такой код тяжело читать и непросто понять, что у него на выходе.

Для решения этой проблемы хочу поделиться простой библиотечкой (точнее не столько библиотечкой, сколько идеей, так как библиотечка получилась ну очень простой ) для генерирования XML на лету в одно выражение. Вот пример использования:


XmlDocument doc = XmlConstructor.Construct()
.RootElement("RootNode")
    .Element("Node")
        .Attribute("attributeName1", "attribute value 1")
        .Attribute("attributeName2", "attribute value 2")
        .Text("text")
        .Element("Test")
            .Attribute("a1", "v1")
            .Attribute("a2", "v2")
        .End()
    .End()

    .Element("Node")
        .Attribute("attributeName1", "attribute value 1")
        .Attribute("attributeName2", "attribute value 2")
        .Text("text")
    .End()
.GetDocument();


Не трудно догадаться, что этот код сгенерирует XmlDocument следующего содержания:

<RootNode>
    <Node attributeName1="attribute value 1" attributeName2="attribute value 2">
        text
        <Test a1="v1" a2="v2"/>
    </Node>
    <Node attributeName1="attribute value 1" attributeName2="attribute value 2">
        text
    </Node>
</Matches>


Как бы выглядел код, генерирующий тот же самый XML стандартным способом, думаю может себе представить каждый, кто когда-либо занимался этим делом (генерацией XML, я имею ввиду), по-этому приводить тут этот ужас я не буду

А с помощью библиотеки можно генерировать вышепоказанным способом не только XmlDocument'ы целиком, но и ветки (XmlElement) для уже существующих документов. Также, библиотечка позволяет указывать пространства имен, генерировать коментарии, инструкции по обработке и прочие XML элементы.
Сама либа тут: http://www.rsdn.ru:80/File/16989/XmlConstructor.zip

02.04.07 12:28: Перенесено модератором из '.NET' — TK
лэт ми спик фром май харт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.