如何在 xml 文件中循环 n 次,每个循环一个级别

How to loop n times, one level per loop in an xml file

这件事我觉得应该很容易,但几个小时后我还是想不通。我试着用谷歌搜索它,但似乎我的大脑想问这个问题的唯一方式是用 3 行解释,这对 google 不起作用。如果您有更好的表达方式,请随时编辑。

我有一个xml文件,这样说:

<tag1>
    <tag2>
        <tag3>
            ...
        </tag3>
    </tag2>
</tag1>

每个父文档可能有多个 tag1、tag2 和 tag3。

使用 pugixml for c++,我想对选定的节点执行操作。这是我想要完成的伪代码,但我知道这是错误的,而且不是真正可行的。

for(pugi::xml_node tag1 : doc->child("tag1").children()){
   //Do something with tag1
   for(pugi::xml_node tag2 : doc->child("tag1").child("tag2").children()){
       //Do something with tag2
       for(pugi::xml_node tag3 : doc->child("tag1").child("tag2").child("tag3").children()){
            //Do something with tag3
       }
   }

}

只要看看这个,就很容易找到不起作用的东西......我需要能够与 doc.child().child().child().child( )..... 在循环内。必须为每次迭代添加 .child() 阻止我做一些递归风格的事情,例如:

void loopXNestedTimes(int n){

   if(n==0) return;
   // Do my stuff
   loopXNestedTimes(n-1);
}

知道我会怎么做吗?我正在使用 Qt 和 C++,但我仍在学习两者,因此我可能缺少允许此操作的语言功能。

使用tag1得到tag2个元素(而不是doc),使用tag2得到tag3个元素,我认为这是关键指出你不见了。

您的代码片段应如下所示:

for (pugi::xml_node tag1 : doc->child("tag1").children()){
   //Do something with tag1
   for (pugi::xml_node tag2 : tag1.child("tag2").children()){
       //Do something with tag2
       for (pugi::xml_node tag3 : tag2.child("tag3").children()){
            //Do something with tag3
       }
   }
}