我有一个 XML 文件,我应该使用 RapidXML 和 c++ 对其进行解析。该文件是系统发育树。每个节点都有一个节点,其中包含 1-3 个子节点,每个子节点都有值。节点可以是学名、通用名或等级。我的问题是,由于每个分类节点的子节点各不相同(例如,一个可能有学名和通用名,一个可能只有学名),我将如何访问子节点的每个值?例如,我写了代码:
for (xml_node<> * clade_node = root_node->first_node("clade"); clade_node; clade_node = clade_node->next_sibling())
{
xml_node<> * taxonomy_node = clade_node->first_node("taxonomy");
xml_node<> * sciName_node = taxonomy_node->first_node("scientific_name");
xml_node<> * comName_node = taxonomy_node->next_sibling("common_name");
xml_node<> * rank_node = taxonomy_node->next_sibling("rank");
string sciName = sciName_node->value();
string comName = comName_node->value();
string rank = rank_node->value();
}
但是我在该行string comName = comName_node->value()
和 RapidXML 文件的这个方法中得到了 EXC_BAD_ACCESS 的线程错误
Ch *value() const
{
return m_value ? m_value : nullstr();
}
这是我正在解析的文件的一部分:
<phylogeny rooted="true" rerootable="false">
<clade>
<clade>
<taxonomy>
<scientific_name>Neomura</scientific_name>
</taxonomy>
</clade>
<clade>
<taxonomy>
<id provider="uniprot">2</id>
<scientific_name>Bacteria</scientific_name>
<rank>superkingdom</rank>
</taxonomy>
</clade>
</clade>
</phylogeny>
谢谢你的帮助!