Переход от DOMNode* к DOMElement* в Xerces-C

У меня есть приложение С++, которое манипулирует xml. Что ж, в какой-то момент моего приложения я получаю 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, к которому я хочу прикрепить новый узел. Мои шаги:

  • Получите строку xml для присоединения к уже существующему dom (хранящемуся где-то как domdocument)

  • Создать парсер

  • С помощью парсера создайте dom-дерево из строки

  • Из моего уже существующего дома (где я хочу прикрепить свой новый узел) вызовите импорт и клонируйте узел, чтобы его можно было прикрепить к уже существующему дому.

  • Прикрепите это

Проблема в том, что импорт и импорт дают мне узел... Я хочу прикрепить элемент...

Я также использую appendChild для добавления элементов... конечно, методу нужен DOMNode*, но дать ему DOMElement* (который наследуется от DOMNode) можно...

Как я могу получить элемент из узла??? удалить wd_parser;


person Andry    schedule 20.01.2011    source источник


Ответы (1)


хорошо, я обнаружил это...

Просто повторно приведите узел к элементу, и все готово... DOMNode - это чистый виртуальный класс, и он является родителем DOMElement... так что это правильно, и это также способ делать вещи (логически говоря).

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

:)

person Andry    schedule 20.01.2011
comment
Привет, на самом деле вы должны заранее проверить тип узла с помощью getNodeType(). Если это ELEMENT_NODE, вы можете привести его к DOMElement. Узнайте больше по адресу: xerces.apache.org/xerces-c/apiDocs- 3/classDOMNode.html - person Clemens; 08.07.2012