Управление распределением памяти DOM Elements на XERCES-C

StackOverflow https://stackoverflow.com/questions/4679855

Вопрос

Мне было два дня бороться с проблемами разбора 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 должен быть указатель, кстати.)

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