Class mgr xml::XmlNode

Материал из ISPWiki
Перейти к: навигация, поиск

Работа с XML

Класс mgr_xml::XmlNode

Узел XML документа

#include <mgrxml.h> 

Описание:

class mgr_xml::XmlNode

Класс XmlNode предоставляет интерфейс для работы с узлами XML документа

Примеры использования:

Следующий пример добавляет поле в форму

XmlNode formNode = ses.xml.GetNode("/*/metadata/form"); 
// нам необходимо убедиться, что описание формы было найдено в исходном xml 
if (formNode) { 
    // добавляем новую строку с именем fiendName в конец формы 
    XmlNode fNode = formNode.AppendChild("field").SetProp("name", fieldName); 
    // добавляем поле ввода типа htmldata высотой в 10 строк 
    // и с именем "data" на только что созданную строку формы 
    fNode.AppendChild("htmldata").SetProp("name", "data").SetProp("rows", "10"); 
} 

Узел secondlvl устанавливается на первый потомок корневого узла ses.xml. Затем в цикле while с условием, что secondlvl не пустой, при помощи secondlvl.Next() перебираются все потомки корневого узла. В цикле проверяются первые потомки secondlvl - thirdlvl. inprocess устанавливается в true, если имя узла thirdlvl - installing", если имя - "name", переменной mgrname присваивается содержимое узла.

bool inprocess = false; 
XmlNode secondlvl = ses.xml.GetRoot().FirstChild(); 
while (secondlvl) { 
    if (secondlvl.IsNode() && secondlvl.Name() == "elem") { 
        string mgrname; 
        XmlNode thirdlvl = secondlvl.FirstChild(); 
        if (thirdlvl.IsNode()) { 
            if (!inprocess) 
                inprocess = (thirdlvl.Name() == "installing"); 
            if (thirdlvl.Name() == "name") 
                mgrname = thirdlvl.Str(); 
        } 
    secondlvl = secondlvl.Next(); 
} 

Если среди потомков корневого узла ses.xml найден узел с именем "methodName", то ему присваивается содержимое переменно mname. Если нет, то для корневого узла создается потомок с таким именем и содержимым.

if (auto node = ses.xml.GetRoot().FindNode("methodName")) { 
    node.SetContent(mname); 
} else { 
    ses.xml.GetRoot().AppendChild("methodName", mname); 
} 

Узел parent ссылается на родительский узел для node. В цикле перебираются все потомки (base) узла parent. Если base не ссылается на node, то если after равно true узел node отсоединяется от его текущего контекста и добавляется после узла base, если false, то перед base.

XmlNode parent = node.Parent(); 
for(XmlNode base = parent.FirstChild(); base; base = base.Next()) { 
    if (base != node) { 
        if (after) 
            base.AddNextSibling(node.Unlink()); 
        else 
            base.AddPrevSibling(node.Unlink()); 
    } 
} 

Warning: Класс, для хранения своих данных, использует std::shared_ptr. Таким образом копирование объекта не приведет к созданию нового экземпляра класса.

Класс XmlNode представляет собой ссылку на узел XML структуры и не содержит данных сам по себе.

mgr_xml::Xml FirstXml; 
mgr_xml::XmlNode node = FirstXml.AppendChild("name", "content1"); 
mgr_xml::Xml SecondXml; 
//К SecondXml добавляется узел c именем "name" и содержимым "content2". 
//Содержимое узла с именем "name" в FirstXml, на который ссылается node, меняется на "content2" 
SecondXml.AppendChild(node.SetContent("content2")); 
 
//К SecondXml добавляется узел c именем "name" и содержимым "content3". 
//Содержимое узла с именем "name" в FirstXml, на который ссылается node, не меняется, т.к. Clone() возвращает дубликат node" 
SecondXml.AppendChild(node.Clone().SetContent("content3")); 
 
//К SecondXml добавляется узел c именем "name" и содержимым "content4". 
//Узел с именем "name" и содержимым "content2", на который ссылается node, отсоединяется от FirstXml" 
SecondXml.AppendChild(node.Unlink().SetContent("content4")); 

Потомки:


Открытые члены (кратко)

XmlNode Clone () const

Возвращает дубликат данного узла


XmlNode Unlink ()

Отсоединяет узел от его текущего контекста и возвращает его в качестве результата


string Name () const

Возвращает имя узла


bool IsText () const

Возвращает значение, определяющее, является ли узел блоком текста


bool IsNode () const

Возвращает значение, определяющее, является ли узел элементом


operator bool () const

Возвращает значение, определяющее, является ли узел пустым


bool operator== ( const XmlNode & )

Оператор сравнения


bool operator!= ( const XmlNode & )

Оператор сравнения

Добавление новых элементов в документ

XmlNode AppendChild ( const XmlNode & )

Добавляет указанный узел к текущему узлу


XmlNode AppendChild ( const char * name )

Добавляет пустой узел с именем name к текущему узлу


XmlNode AppendCData ( const string &content )

Добавляет блок CDATA.


XmlNode AppendChild ( const char * name , const string &content )

Добавляет узел с именем name и содержимым content к текущему узлу


XmlNode AddPrevSibling ( const XmlNode & )

Добавляет указанный узел перед текущим узлом


XmlNode AddNextSibling ( const XmlNode & )

Работа с атрибутами

void DropProp ( const char * name )

Удаляет атрибут текущего узла с именем name.


string GetProp ( const char * name )

Возвращает значение атрибута с именем name. Если элемент не найден, то возвращается пустая строка


XmlNode SetProp ( const char * name , const string &value )

Устанавливает (или сбрасывает) значение атрибута с именем name.


void AllProps ( StringList &props )

Работа с содержимым

XmlNode SetContent ( const string &content )

Заменяет содержимое узла


string Str () const

Возвращает содержимое узла в виде блока текста


operator string () const

Навигация по XML документу

XmlNode Next () const

Возвращает следующий за текущим узел. Если достигнут конец списка или элемент является атрибутом, то возвращается пустой узел


XmlNode Prev () const

Возвращает предыдущий узел. Если достигнуто начало списка или элемент является атрибутом, то возвращается пустой узел


XmlNode Parent () const

Возвращает родителя текущего узла. Если текущий узел является атрибутом, то возвращается пустой узел


XmlNode FirstChild () const

Возвращает первый элемент из спика потомков. Если потомки отсутсвуют, то возвращается пустой узел


XmlNode LastChild () const

Возвращает последний элемент из спика потомков. Если потомки отсутсвуют, то возвращается пустой узел


XmlNode FindNode ( const string &name )

Методы

XmlNode AppendChild ( const XmlNode & )

Добавляет указанный узел к текущему узлу

XmlNode AppendChild ( const char * name )

Добавляет пустой узел с именем name к текущему узлу

XmlNode AppendCData ( const string &content )

Добавляет блок CDATA.

XmlNode AppendChild ( const char * name , const string &content )

Добавляет узел с именем name и содержимым content к текущему узлу

XmlNode AddPrevSibling ( const XmlNode & )

Добавляет указанный узел перед текущим узлом

XmlNode AddNextSibling ( const XmlNode & )

Добавляет указанный узел как следующий за текущим узлом

void DropProp ( const char * name )

Удаляет атрибут текущего узла с именем name.

string GetProp ( const char * name )

Возвращает значение атрибута с именем name. Если элемент не найден, то возвращается пустая строка

XmlNode SetProp ( const char * name , const string &value )

Устанавливает (или сбрасывает) значение атрибута с именем name.

void AllProps ( StringList &props )

Возвращает список атрибутов текущего узла

XmlNode SetContent ( const string &content )

Заменяет содержимое узла

string Str () const

Возвращает содержимое узла в виде блока текста

operator string () const

Данная функция/метод является inline функцией

Возвращает содержимое узла в виде блока текста

XmlNode Next () const

Возвращает следующий за текущим узел. Если достигнут конец списка или элемент является атрибутом, то возвращается пустой узел

XmlNode Prev () const

Возвращает предыдущий узел. Если достигнуто начало списка или элемент является атрибутом, то возвращается пустой узел

XmlNode Parent () const

Возвращает родителя текущего узла. Если текущий узел является атрибутом, то возвращается пустой узел

XmlNode FirstChild () const

Возвращает первый элемент из спика потомков. Если потомки отсутсвуют, то возвращается пустой узел

XmlNode LastChild () const

Возвращает последний элемент из спика потомков. Если потомки отсутсвуют, то возвращается пустой узел

XmlNode FindNode ( const string &name )

Возвращает потомка с именем name. Поиск происходит только на первом уровне

XmlNode Clone () const

Возвращает дубликат данного узла

XmlNode Unlink ()

Отсоединяет узел от его текущего контекста и возвращает его в качестве результата

string Name () const

Возвращает имя узла

bool IsText () const

Возвращает значение, определяющее, является ли узел блоком текста

bool IsNode () const

Возвращает значение, определяющее, является ли узел элементом

operator bool () const

Возвращает значение, определяющее, является ли узел пустым

bool operator== ( const XmlNode & )

Оператор сравнения

bool operator!= ( const XmlNode & )

Оператор сравнения