QTDom - 以递归方式将子项添加到特定元素

时间:2014-03-24 09:02:40

标签: c++ xml qt dom xml-parsing

我有几个xml文件,其中一些节点彼此包含“引用”。我想将此xml的内容作为子节点添加到节点,其中包含此引用

void GameObject::ExpandNode(QDomElement& expNode)
{

    if ((expNode.tagName() == "Instance" && expNode.attribute("type") == "library") ||
         (expNode.tagName() == "library" && expNode.hasAttribute("file")))
    {
        QString fileName;
        if (expNode.tagName() == "Instance" )
            fileName = FindLib(expNode.attribute("definition")).attribute("file");
        else
            fileName = expNode.attribute("file");
        QFile nestedFile(fileName);
        QDomDocument nestedLib;
        nestedLib.setContent(&nestedFile);
        QDomElement nestedNode = libDoc->createElement("NestedLibrary");
        nestedNode.setAttribute("path", fileName);
        nestedNode.appendChild(nestedLib);
        expNode.appendChild(nestedNode);
    }

    QDomNode childNode = expNode.firstChild();
    while (!childNode.isNull())
    {
        if (childNode.isElement())
            ExpandNode(childNode.toElement());
        childNode = childNode.nextSibling();
    }
}

但我得到的是 没有匹配函数来调用'GameObject :: ExpandNode(QDomElement)'ExpandNode(childNode.toElement());

我该怎么做?                                              ^

2 个答案:

答案 0 :(得分:1)

使用临时对象调用ExpandNode是错误的决定。解决方案是

QDomNode childNode = expNode.firstChild();
while (!childNode.isNull())
{
    if (childNode.isElement())
    {
        QDomElement childElem = childNode.toElement();
        ExpandNode(childElem);
    }
    childNode = childNode.nextSibling();
}

答案 1 :(得分:0)

isElement:如果此函数返回true,则表示此对象不是QDomElement;

这样做     QDomElement node = childNode.toElement;     if(node!= NULL)     {        ExpandNode(节点);     }