уже существует библиотека C ++ XML: xerces.http://xerces.apache.org/xerces-c/install-3.html
есть некоторые древовидные структуры в \ include \ boost-1_46_1 \ boost \ intrusive \ есть красно-чёрное и avl-дерево, но я давно не смотрю на нихЯ не знаю, могут ли они быть особенно полезны.
XML - это древовидная структура.вы не знаете, какой будет структура, если только она не определена и не включена в DTD (хотя валидатор на валидроме разрывается на! DOCTYPE и не должен).
см. http://w3schools.com/xml/xml_tree.asp для примера дерева.
Вы можете получить что-то, что не следует DTD или схеме.полностью неструктурированныйкак это:
<?xml version="1.0"?>
<a>
<b>hello
<e b="4"/>
<c a="mailto:jeff@nowhere.com">text</c>
</b>
<f>zip</f>
<z><b /><xy/></z>
<zook flag="true"/>
<f><z><e/></z>random</f>
</a>
Я знаю, что базы данных XML с запросами существуют, но я не знаю о них много, за исключением того, что они могут обрабатывать неструктурированные данные.
PHP имеет синтаксический анализатор XMLкоторый вставляет его в то, что PHP называет массивом (не совсем как массив C / C ++, потому что массивы могут иметь массивы), вы можете поработать с ним, чтобы увидеть пример того, что должна иметь структура данных XML.
В сущности, вам нужно очень гибкое дерево, в котором корневой указатель указывает на список.каждый из этих узлов в списке содержит указатель, который может указывать на список.это должен быть упорядоченный список, поэтому сделайте это.Если ваша цель состоит в том, чтобы иметь возможность удалять данные, используйте вместо - они упорядочены, имея возможность легкой манипуляции.
слово предупреждения: .erase (итератор i) стирает все, начиная с и после i..erase (итератор i1, итератор i2) стирает все с i1 до i2, но не включая..end () - это итератор, который указывает 1 после конца списка, по сути, на ноль..begin () - это итератор, указывающий на начало списка.
научиться использовать for_each (start, end, function) {} в или использовать регулярное выражение for.
итераторыкак указатели.относитесь к ним как к таковым.
#include <iterator>
#include <list>
#include <iostream>
using namespace std;
list<class node> nodelist;
list<class node>::iterator nli;
for (nli=nodelist.begin(); nli!=nodelist.end(); nli++) {
cout<<nli->getData()<<endl;
}
узлы должны иметь необязательный список атрибутов и помнить, что DTD может содержаться в документе XML, поэтому вы должны иметь возможность читать его для анализадокумент (или вы могли бы выбросить его).Вы также можете столкнуться с XML-схемой, преемником DTD.