Вопрос

У меня есть приложение 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 из строки

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

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

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

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

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

Это было полезно?

Решение

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

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

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

:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top