gpt4 book ai didi

c++ - 按顺序解析 XML C++

转载 作者:行者123 更新时间:2023-11-28 07:43:42 25 4
gpt4 key购买 nike

这与我之前的一个问题有关。我正在尝试从 xml 文件构建树。我计划遍历 xml 文件并从数据中创建对象,并按前序和中序创建对象的 vector ,以便我可以构建树对象。我使用的 xml 文件比这个更密集(大约 23 层左右),但这里是一个布局示例:

<?xml version="1.0" encoding="utf-8"?>
<MyJournal>
<species>
<name>Sea Creature</name>
<species>
<name>Fish</name>
<species>
<name>swordfish</name>
</species>
<species>
<name>grouper</name>
</species>
</species>
<species>
<name>Mammal</name>
<species>
<name>dolphin</name>
</species>
<species>
<name>whale</name>
</species>
</species>
</species>
<species>
<name>Land animal</name>
<species>
<name>Mammal</name>
<species>
<name>dog</name>
</species>
<species>
<name>cat</name>
</species>
</species>
<species>
<name>Bird</name>
<species>
<name>blue jay</name>
</species>
<species>
<name>robin</name>
</species>
</species>
</species>
</MyJournal>

我的预购和后购方法。首先传入根节点“MyJournal”。

void preOrder(xml_node<> *species) // add to left node
{
Node t1 = *new Node();
xml_node<> * name_node = species->first_node("name");
//If there is a value for name, set the name of the node to this name
if(name_node != 0)
{
t1.setName(name_node->value());
cout << t1.getName() << " ";
}
//If there is no name node, print the default name which is "ROOT"
if(name_node == 0)
{
cout << t1.getName() << " ";
}
for (xml_node<> * child_node = species->first_node("species"); child_node; child_node = child_node->next_sibling())
{
loop2(child_node); // add these to right node
}
}

void postOrder(xml_node<> *species) // add to left node
{
Node t1 = *new Node();
for (xml_node<> * child_node = species->first_node("species"); child_node; child_node = child_node->next_sibling())
{
loop3(child_node); // add these to right node
}
xml_node<> * name_node = species->first_node("name");
if(name_node != 0)
{
t1.setName(name_node->value());
cout << t1.getName() << " ";
}
if(name_node == 0)
{
cout << t1.getName() << " ";
}

}

到目前为止,我能够遍历文件并按前序和后序获取对象,但我不知道如何按顺序获取数据,因为没有左指针或右指针来调用函数递归地。谁能给我一些关于如何去做的指导?是否可以通过这种方式获取数据并成功构建树结构?感谢您的帮助!

最佳答案

前、后和中序遍历的概念仅适用于二叉树:每个节点最多有两个子节点的树。

XML 数据(通常)不必遵循此规则:每个节点可以有任意数量的子节点。

如果您的 XML 文件必须被插入为二叉树,那么只需将第一个物种节点视为“左”,并将其兄弟节点(如果存在)视为“右”。

请注意,在这种情况下,您遍历所有 sibling 的循环没有任何意义。

关于c++ - 按顺序解析 XML C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15300711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com