已经建立了一个 C++ XML 库:xerces。
http://xerces.apache.org/xerces-c/install-3.html
\include\boost-1_46_1\boost\intrusive\ 中有一些树结构
有一个红黑和一个avl树,但是好久没看,不知道是不是特别好用,我觉得没有。
XML 是一个树形结构。你不知道结构将是什么,除非它定义了一个 DTD 并将其包含在 a 中(尽管 validrome 的验证器在 !DOCTYPEs 上中断并且它不应该)。
查看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 数据结构的示例应该有。
您基本上想要的是一个非常灵活的树,其中根指针指向一个列表。列表中的每个节点都包含一个可以指向列表的指针。它应该是一个有序列表,所以将其设为 .如果您的目的是能够删除数据,请使用 a 而不是 a - 它是有序的,同时具有易于操作的能力。
警告:.erase(iterator i) 擦除从 i 开始和之后的所有内容。
.erase(iterator i1, iterator 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 Schema,DTD 的继承者。