我有一个处理xml的C++应用程序。
好吧,在我的应用程序的某个时刻,我得到了DOMNode *,然后将其作为子元素附加到元素上。

问题是我想向该节点添加参数...它是一个节点,因此它不是元素...只有元素才具有参数...

这是我的代码:

xercesc::DOMNode* node = 0;
std::string xml = from_an_obj_of_mine.GetXml(); /* A string with xml inside, the xml is sure an element having something inside */
xercesc::MemBufInputSource xml_buf((const XMLByte*)xml.c_str(), xml.size(), "dummy");
xercesc::XercesDOMParser* parser = new xercesc::XercesDOMParser();
parser->parse(xml_buf); /* parser will contain a DOMDocument well parsed from the string, I get here the node i want to attach */
node = my_pointer_to_a_preexisting_domdocument->GetXmlDocument()->importNode(parser->getDocument()->getDocumentElement(), true); /* I want to attach the node in parser to a node of my_pointer_to_an_el_of_my_preexisting_domdocument, it is a different tree, so I must import the node to attach it later */
my_pointer_to_an_el_of_my_preexisting_domdocument->appendChild(node);

如您所见,我想通过字符串创建节点,我通过解析来创建它,然后需要导入该节点以创建属于dom树的新的相同节点,该树要附加新节点。
我的步骤是:
  • 获取要附加到预先存在的dom(作为domdocument存储在某处)的xml字符串
  • 创建解析器
  • 使用解析器从字符串
  • 创建dom树
  • 从我先前存在的dom(我要附加新节点的位置)中,调用import并克隆该节点
    以便可以将其附加到先前存在的dom。
  • 附加它

  • 问题是导入和导入使我获得了一个节点...我想要附加一个元素...

    我也使用appendChild来追加元素...当然,该方法需要DOMNode *,但是给它一个DOMElement *(继承自DOMNode)是可以的...

    如何从节点获取元素???
    删除wd_parser;

    最佳答案

    好,我发现了...

    只需将节点重铸为元素即可完成……DOMNode是一个纯虚拟类,它是DOMElement的父类……所以它是正确的,并且也是做事的方式(从逻辑上讲)。

    DOMElement* = dynamic_cast<DOMElement*>(node);
    

    :)

    09-25 18:44