我正在使用MSXML来解析xml文件。 我取得了一些成功,但遇到了问题。
这是我试图解析的文件的简化示例...
<root>
<main_menu Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
<sub_menu Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" >
<box Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
<box Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
</sub_menu>
<box Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
<sub_menu Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" >
<list Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" >
<item Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
<item Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
</list>
</sub_menu>
<box Attr_1 = "aaaa" Attr_2 = "bbbb" Attr_3 = "cccc" />
</main_item>
我需要做的是找出与节点“sub_menu”相关联的子项的数量,以便我可以遍历它们。要做到这一点,我使用了类似的东西......
MSXML::IXMLDOMNodeListPtr pMainItem;
MSXML::IXMLDOMNodePtr pNode;
pMainItem = pRootNode->selectNodes("/root/main_item/sub_menu*");
printf("%u main items\n", pMainItem->Getlength());
for (i = 0; i < 3; i++) // 3 = Magic Number
{
pNode = pMainItem->item[i];
length = pNode->attributes->Getlength();
etc
问题是 - 因为我在结构中的同一级别有2个名为“sub_menu”的节点,pMainItem-&gt; Getlength()返回3而不是2.它计算所有节点的子项的总数,称为sub_menu 。我需要的是sub_menu的FIRST实例的子项数。因此,我无法限制for循环的迭代次数(因此是幻数)
我没有选择更改XML文件的结构以使节点名称更加独特。我觉得必须有一种不同的方法来实现我想要的东西,但我对XML和C ++的了解目前相当有限。
非常感谢任何帮助或建议。