gpt4 book ai didi

c++ - 如何使用 rapidxml 读取嵌套的 xml

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:24 24 4
gpt4 key购买 nike

我正在尝试使用 RapidXML 来解析如下所示的 xml 内容:

<?xml version="1.0" ?>
<!DOCTYPE open-psa>
<open-psa>
<define-gate name="top" >
<or>
<gate name="g1" />
<gate name="g2" />
</or>
</define-gate>
<define-basic-event name="e1">
<exponential>
<parameter name="lambda1" />
<mission-time />
</exponential>
</define-basic-event>
<define-parameter name="lambda1">
<lognormal-deviate>
<float value="2.0e-5" />
<float value="3" />
<float value="0.95" />
</lognormal-deviate>
</define-parameter>
</open-psa>

我已经能够使用以下代码访问所有直接子级到 open-psa

cout << "Importing fault tree...\n" ;
xml_document<> doc;
xml_node<> * root_node;
char* node_name;

// Read the xml file into a buffer
ifstream theFile ("SmallTree.xml");
vector<char> buffer((istreambuf_iterator<char>(theFile)),
istreambuf_iterator<char>());
buffer.push_back('\0');

// Parse the buffer
doc.parse<0>(&buffer[0]);

// Find the root node
root_node = doc.first_node("open-psa");

// Iterate over all child nodes
for (xml_node<> * node = root_node->first_node(); node; node = node->next_sibling())
{
node_name = node->name();
if (strcmp(node_name, "define-gate" ) == 0)
{
cout << node->name() << ", ";
cout << node->first_attribute("name")->value() << endl;
}
else if (strcmp(node_name, "define-basic-event" ) == 0)
{
cout << node->name() << ", ";
cout << node->first_attribute("name")->value() << endl;
}
else if (strcmp(node_name, "define-parameter" ) == 0)
{
cout << node->name() << ", ";
cout << node->first_attribute("name")->value() << endl;
}
}

现在我卡住了。我如何访问嵌套在 define-gate name="top"中的元素 正如您可能猜到的那样,一个实际的 .xml 文件可能有大量的门、基本事件、参数等,我不认为我可以假设任何特定的顺序。

最佳答案

node->next_sibling() 获取 XML 文档中同一级别的下一个节点。如果你想进入'node'的内部节点,使用first_node():

xml_node<>* nodeInternal = node->first_node();

关于c++ - 如何使用 rapidxml 读取嵌套的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14064860/

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