0

我想解析 XML 文档中的一些数据,我正在使用 while 循环。

Poco::XML::NodeIterator it(_pDocument, Poco::XML::NodeFilter::SHOW_ELEMENT);
Poco::XML::Node* pNode = it.nextNode();

pNode = it.nextNode();

while (pNode)
{ 
    std::cout<<pNode->nodeName()<<" :"<< pNode->nodeValue() << "\n";

    if (pNode->nodeName() == "name")
    {
        std::cout << "Loading Map with Name : " << getString(pNode->nodeName()) << "\n";
    }

    if (pNode->nodeName() == "actor")
    {
        std::cout << "Actor Type : " << getString("actor[@type]") << "Actor Name : " <<   getString("actor[@name]") << "\n";
    }
    pNode = it.nextNode();
}

这有效(尽管可能不是最好的解决方案)。但是,在我的 XML 中有 2 个具有不同值的演员元素,但代码两次返回第一个元素的值。

编辑:

<thorium>
<name>SampleLevel</name>

<actor type="1Volume" name="m_pActor1" enabled="true">
<attribute name="Rotation" value="-1.0 1.0 0.0"/>
<attribute name="Position" value="-1.2 0.0 0.0"/>
</actor>

<actor type="2Volume" name="m_pActor2" enabled="false">
<attribute name="Rotation" value="1.0 1.0 0.0"/>
<attribute name="Position" value="1.2 0.0 0.0"/>
</actor>

4

1 回答 1

0

getString没有使用itor pNode,所以它无法知道你是在看第一次还是第二次。看起来您正在传递getString一个 XPath 查询。因此,当在整个文档上执行时,它会返回与查询匹配的任何内容。

你可能想要pNode->attributes

于 2013-06-12T17:21:16.627 回答