У меня много проблем с работой библиотеки libxml2 для разбора файла xml.
Я выполнил предыдущую похожую проблему, но столкнулся с другой.
Вот код проблемы:
class SSystem{
public:
//Constructors
SSystem(){};
//Make SSystem from XML Definition. Pass ptr to node
SSystem(xmlNodePtr Nptr, xmlDocPtr Dptr){
name = wxString((char *)xmlGetProp(Nptr, (xmlChar*)"name"), wxConvUTF8);
//Move to next level down, the <general> element
Nptr = Nptr->xmlChildrenNode;
//Move one more level down to the <radius> element
Nptr = Nptr->xmlChildrenNode;
//Get Radius value
if (!xmlStrcmp(Nptr->name, (const xmlChar *)"radius")) {
char* contents = (char*)xmlNodeGetContent(Nptr);
std::string test1 = std::string(contents);
radius = wxString(contents, wxConvUTF8);
}
}
И xmlNodePtr, и xmlDocPtr передаются в конструктор, который прекрасно работает, принимая только свойство ("имя"), но теперь задыхается от дальнейшего анализа.
Вот фрагмент рассматриваемого XML-файла:
<?xml version="1.0" encoding="UTF-8"?>
<Systems>
<ssys name="Acheron">
<general>
<radius>3500.000000</radius> <-- I am trying to get this value (3500).
<stars>300</stars>
<asteroids>0</asteroids>
<interference>0.000000</interference>
<nebula volatility="0.000000">0.000000</nebula>
</general>
Он хорошо компилируется, но вылетает при загрузке конструктора (я знаю, потому что, если я закомментирую условное условие if и char * contents = (char *) xmlNodeGetContent (Nptr-> xmlChildrenNode), он работает нормально.
Я пробовал так много разных вещей (удалил один из Nptr-> xmlChildrenNode), но ничего не работает.
Что не так?