我最近开始使用tinyXML。问题是当我运行我的程序来读取xml时,它返回一个访问冲突。一个共同点是:
doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText()
使用visual studio调试器,我确定它为'Map'返回null,然后使用null引用来调用函数。
这是第一行代码和xml
XMLDocument doc;
doc.LoadFile(path.c_str());
int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());
XML:
<?xml version="1.0"?>
<Master>
<Map>
<Width>5</Width>
<Height>5</Height>
<Layers>1</Layers>
<Tiles>
<Tile>
<Id>1</Id>
<Path>data/tiles/dirt-base.png</Path>
</Tile>
</Tiles>
<Data>
<DataLayer>1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1</DataLayer>
</Data>
</Map>
</Master>
重要的是要注意,我最初没有root标签,但是当它不起作用时添加它,添加它仍然没有帮助。任何帮助将不胜感激
答案 0 :(得分:3)
更改
int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());
到
int width = atoi(doc.FirstChildElement("Master")->FirstChildElement("Map")->FirstChildElement("Width")->GetText());
它正在我的电脑上使用最新的tinyxml。
根据TinyXml文档
您应首先检查LoadFile返回
if (!_doc.LoadFile(filename))
{
printf("load file=[%s] failed\n", filename);
return -1;
}
然后检查元素是否存在以避免访问冲突。
使用TiXmlHandle检查元素更容易。
TiXmlHandle docHandle(&doc);
TiXmlElement* child = docHandle.FirstChild("Map").FirstChild("Width").ToElement();
if (child)
{
// do something useful
答案 1 :(得分:1)
就像你在问题的评论中所说,错误代码3是file not found
你很可能已经解决了这个问题,但是造成这种情况的一个常见原因就是简单地在路径中使用反斜杠。
我自己就是这个问题。做了相当多的Web开发,在同一个项目中由于不同的脚本/标记/服务器端/客户端funk(以及有时需要反转方向)在发布时你的一半斜线!),这会产生很多。还是让我难过了一个小时。
为了参考起见,最近坚持这个可能的解决方案 - 这是TinyXML上最突出的Google结果和这个问题。
答案 2 :(得分:0)
在我看来,你正在调用的TinyXML函数之一正在返回一个无效指针。尝试分别检查每个呼叫的结果,您将能够确定问题。