Не понимаю, что происходит с памятью атрибута и rapidXML.Функция инкапсулирует синтаксический анализ XML, в случае успеха возвращает ссылку на корневой узел, при вызове дерева обхода DOM внутри этой функции я получаю правильные данные, хранящиеся в файле XML.
typedef rapidxml::xml_node<>* Node;
...
Node Load()
{
Node pRootNode = NULL;
// read file stream in bytes
...
std::vector<char> xmlCopy(bytes.begin(), bytes.end());
xmlCopy.push_back('\0');
rapidxml::xml_document<> doc;
try
{
doc.parse<rapidxml::parse_declaration_node | rapidxml::parse_no_data_nodes>(&bytes[0]);
pRootNode = doc.first_node();
...
TraverseDOMTree(pRootNode);
}
return pRootNode;
}
TraverseDOMTree печатает всеатрибуты и имена узлов, как и ожидалось.
Позже, очевидно, вне области Load, pRootNode будет использоваться для запроса значений из DOM-3, это не работает.В целях тестирования вызов TraverseDOMTree, который отлично работал, теперь печатает значения мусора атрибута.Я могу предположить, что дерево DOM все еще там, та же иерархия узлов, что и в первом вызове, но значения атрибутов испорчены.Я попытался сделать глобальный rapidxml :: xml_document <> doc , а также добавить флаг parse_non_destructive , но ни один из них не имеет значения.
Если имеет значение, клиент используетметод Load работает в том же потоке.Что может быть не так?