Это было два дня для меня бороться с проблемами XML разбора и она до сих пор еще не закончена :)DOM диспетчеризация элементов памяти на Xerces-C
Ну, после многих trils я, наконец, решил использовать Xerces -C для разбора xml в моем приложении C++.
Ну ... Я попробовал TinyXml, RapidXml и другие ... Xerces тоже ведут себя одинаково при управлении узлами с точки зрения распределения памяти.
Ну, DOMElement, DOMDocument, DOMNode tey все являются частными конструктивными классами ... Я знаю, что он предназначен для обеспечения наилучшей производительности при разборе, но при попытке управлять узлами между классами становится очень плохо.
У меня есть эта проблема. Я хотел бы создать класс, в котором хранится XML-документ (объект DOM, который имеет все узлы, которые я хочу, и что я могу свободно перемещаться, поэтому это не строка var, а DOM obj, я полагаю, 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 документа, функция конструктора выходит из области видимости и синтаксического анализа удаляется, и поэтому ev , поэтому мой _xmldoc не укажет на ничего ...
Как я могу решить эту проблему ???
Спасибо ...
Да, я решил сохранить синтаксический анализатор, и я не был уверен, что за это будет правильный путь, чтобы продолжить ... но если ты так говоришь ... что ж, спасибо тебе. – Andry
Это, к сожалению, единственный способ. Раньше я был поражен дизайном этой библиотеки. –