Переход от DOMNode * к DOMElement * в Xerces-C - PullRequest
2 голосов
/ 20 января 2011

У меня есть приложение на 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 (где-то хранится как документ)

  • Создать анализатор

  • Используя синтаксический анализатор, создайте дерево dom из строки

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

  • Присоединить его

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

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

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

1 Ответ

6 голосов
/ 20 января 2011

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

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

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

:)

...