【发布时间】:2011-04-23 14:57:57
【问题描述】:
我在使用 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 之一),但没有任何效果。
怎么了?
【问题讨论】:
-
我认为崩溃是由于分段错误造成的,所以带有指针的东西出了问题。
-
有人吗?还有其他建议吗?
标签: c++ libxml2 xml-parsing