Управление распределением памяти DOM Elements на XERCES-C
-
10-10-2019 - |
Вопрос
Мне было два дня бороться с проблемами разбора XML, и он еще не закончил :)
Что ж, после многих трил я наконец решил использовать Xerces-C для анализа XML в моем приложении C ++.
Ну ... я попробовал tinyxml, rapidxml и другие ... Xerces тоже ведут себя так же, когда управляя узлами с точки зрения распределения памяти.
Ну, DomeLement, Domdocument, Domnode Tey - все это классы частных конструкций ... Я знаю, что это для обеспечения наилучшей производительности при анализе, но это становится действительно плохо при попытке управлять узлами между классами.
У меня есть эта проблема. Я хотел бы создать класс, в котором хранится документ XML (объект DOM, который имеет все узлы, которые я хочу, и который я могу свободно ориентироваться, так что это не строка, а dom obj, я полагаю, что домиль/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 не укажет ни на что ...
Как я могу решить эту проблему???
Спасибо...
Решение
Вы должны держать синтаксический анализатор. Либо пропустить его как аргумент (по ссылке), сделайте его членом MyTree
(Опять же, как ссылка) или поместите его в класс Синглтона.
(_xmldoc
должен быть указатель, кстати.)