gpt4 book ai didi

c++ - RapidXML - 如何处理丢失的节点/值

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:27 26 4
gpt4 key购买 nike

我想使用 RapidXML 从 XML 读取到 C++。但是,如果节点不存在或缺少值,程序就会崩溃。

for (rapidxml::xml_node<> * xmlasset_node = root_node->first_node("Asset"); xmlasset_node; xmlasset_node = xmlasset_node->next_sibling())
{mystring += xmlasset_node->first_attribute("name")->value()};

但是,这个“名称”属性并不存在于所有节点中,如果它不是在 XML 中,则将用默认值填充。与此类似,我有一些不在所有节点中的子节点。原因只是为了让 XML 尽可能小和清晰,以便手动调整。

如何实现检查/测试 (C++),以防止程序崩溃并在值/节点不存在时仅采用默认值?

亲切的问候,- 科拉克

最佳答案

这是我做的,你可以比较节点的值和它的属性是否符合你的标准然后你接受它://基本上我在寻找“设置”节点,然后是“网络”子节点,然后是“端口”属性

  if( boost::iequals(doc.first_node()->next_sibling()->name(), "settings"))
{
for (xml_node<> *node = doc.first_node()->next_sibling()->first_node(); node; node = node->next_sibling())
{

// find network tag
if (boost::iequals(node->name(),"network"))
{

for (xml_attribute<> *attr = node->first_attribute(); attr; attr = attr->next_attribute())
{
if ( boost::iequals(attr->name(), "port"))
{
strcpy(attr->value(), portname);
}
}
}
}
}

关于c++ - RapidXML - 如何处理丢失的节点/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658179/

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