У меня было два дня, чтобы бороться с проблемами разбора XML, и это все еще не закончено:)
Что ж, после многих попыток я, наконец, решил использовать Xerces-C для анализа xml в моем приложении c ++.
Хорошо ... Я попробовал TinyXml, RapidXml и другие .... Xerces также ведет себя одинаково при управлении узлами с точки зрения распределения памяти.
Что ж, DOMElement, DOMDocument, DOMNode - все они являются закрытыми классами конструкций ... Я знаю, что это обеспечивает лучшую производительность при разборе, но при попытке управлять узлами между классами это становится очень плохо.
У меня есть эта проблема.
Я хотел бы создать класс, в котором хранится документ XML (объект DOM, в котором есть все нужные мне узлы, и по которому я могу свободно перемещаться, так что это не строковая переменная, а объект DOM, я полагаю, что DOMElement / DOMDocument хорош ). Ну, этот объект является членом моего класса. Используя функции в моем классе, я хочу, чтобы дерево DOM росло со временем ... Внутренне я сохраняю дерево и, когда хочу, распечатываю его в файл.
Это то, что я хочу сделать. Я знаю, что это кажется странным, но это мое требование. Я должен сделать это, любое другое решение не должно рассматриваться ... извините. (Я должен сообщить вам причину, почему это реализация, но это заняло бы много времени).
Выражая это в коде, следующие строки представляют собой то, чего я хотел бы достичь:
class MyTree {
public:
MyTree();
^MyTree(); // It is a tilde :)
// Methods
void AddToTree(std::string el); // Adds a new node somewhere in the DOM
std::string GetTree(); // Inserts the tree in a string
private:
DOMDocument _xmldoc;
};
Учитывая все ограничения, вызванные закрытыми конструкторами, и то, что я могу получить DOMDocument только из XercesDOMParser, и я получаю указатель, как мне этого добиться ...
Если в конструкторе я делаю так:
MyTree::MyTree() {
XercesDOMParser parser;
parser.parse(XMLString::transcode("<...>...</...>"));
this->_xmldoc = parser.getDocument();
}
После назначения _xmldoc документа, функция конструктора выходит из области видимости, и анализатор удаляется, и поэтому каждый принадлежащий ему компонент, так что мой _xmldoc ничего не будет указывать ...
Как я могу решить эту проблему ???
Спасибо ...