以下のコードはまだコンパイルしていませんが、必要に応じて修正するのに十分正確なはずです。少なくとも、目的に使用できるアプローチと機能を説明する必要があります。より良い方法があるかもしれませんが、他に応答がない場合は、これで十分です。
あなたが説明する1-のような問題については、次のようなコードを使用します
xml_document<> doc;
doc.parse<0>(xml_buffer); // parse your string
xml_node<>* rootnode = doc.first_node("rootnode"); // Get first node
xml_node<>* childnode1 = rootnode->first_node("childnode1"); // childnode1
if (childnode1 != NULL) {
// get first deeper node and loop over them all
int number_of_siblings = 0;
xml_node<>* deepernode = childnode1->first_node();
while (deepernode != NULL) {
// Do processing on this node
// Your processing code here....
// now get the next deepernode in this current level of nesting
// pointer will be NULL when no more siblings
deepernode = deepernode->next_sibling();
number_of_siblings++;
}
// Your xml had number_of_sibling nodes at this level
}
質問2について-同じ種類のwhileループを使用して、childnode1レベルで兄弟ノードをループできます。兄弟の名前を確認する必要がある場合は、使用できます
string strNodeName = "childnode2";
if (current_node->name() == strNodeName) {
// current node is called childnode2 - do your processing.
}
ノード名を調べる必要がない場合は、これを使用して rootnode の下のすべての子ノードをループします
xml_document<> doc;
doc.parse<0>(xml_buffer); // parse your string
xml_node<>* rootnode = doc.first_node("rootnode"); // Get first node
xml_node<>* childnode = rootnode->first_node(); // get first childnode
int child_node_count = 0;
while (childnode != NULL) {
// Do processing on this node
// get sibling of current node (if there is one)
childnode = childnode->next_sibling();
child_node_count++;
}
// child_node_count is now the number of child nodes under rootnode.