xml解析中QDomDocument的setContent方法报错

__阿飞__ 2012-10-15 02:44:51
接触Qt不久,今天要做一个结果列表,就采用了xml,然后就用Qt的DOM来解析,结果发现,每次执行到QDomDocument的setContent方法都要报错,贴代码:

xml文件:recordshistoryrecords.xml

<?xml version="1.0" encoding="UTF-8" ?>
<historyrecords>
<record id="01">
<injectamount>100</injectamount>
<speedtime>0.5</speedtime>
<psi>1200</psi>
<time>0.6</time>
<status>good</status>
</record>
<record id="02">
<injectamount>110</injectamount>
<speedtime>0.6</speedtime>
<psi>1100</psi>
<time>0.3</time>
<status>bad</status>
</record>
</historyrecords>


解析xml文件的代码:

void historyrecords::showhisrecords() {

QDomDocument doc;
QFile file("recordshistoryrecords.xml");
QString errorStr;
int errorLine;
int errorCol;
//setContent是将指定的内容指定给QDomDocument解析,
//第一参数可以是QByteArray或者是文件名等
if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol))
{
//如果出错,则会进入这里。errorStr得到的是出错说明
//errorLine和errorCol则是出错的行和列
qDebug() << errorStr << "line: " << errorLine << "col: " << errorCol;
}

QDomNode firstNode = doc.firstChild();

qDebug() << qPrintable(firstNode.nodeName()) << qPrintable(firstNode.nodeValue());

}


每次报错都会报:
"error occurred while parsing element" line: 1 col: 1

很无语啊,我把xml都检查了好多次,怎么都不对,就是过不去,希望大侠帮着看看,谢谢了!
...全文
2791 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seven_boom 2014-10-20
  • 打赏
  • 举报
回复
文件可以打开 啊,不是路径的问题。我也是看的霍亚飞的那本<Qt Creator快速入门>,然后就照着写那个xml文件的例子(没学过XML); 后来换了一个XML文件可以读读粗来了,然后对比两个XML文件发现原来是XML文件第一行的 <?xml version = "1.0" encoding = "UTF-8"?> 中的问号两边不能有空格! 刚开始还以为文件大小不对,XML显示占用空间字节大小为0。。。 不过改了还是显示为0,这个就不知道为什么了。
namezdd 2014-06-18
  • 打赏
  • 举报
回复
相对路径可以的,只要是在执行目录下就行
spider_zhu 2014-05-10
  • 打赏
  • 举报
回复
我的还是不行啊,什么路径都不行
__阿飞__ 2012-10-16
  • 打赏
  • 举报
回复
我打开了,还是错的,报错还是:
"error occurred while parsing element" line: 1 col: 1 "
我一开始是拿着霍亚飞的那本<Qt Creator快速入门>那本书看,他的代码在我这就运行不过去,后来只能百度谷歌,上面那些代码是网上参考的一段,结果还是老问题.

[Quote=引用 3 楼 的回复:]

C/C++ code

void historyrecords::showhisrecords() {

QDomDocument doc;
QFile file("recordshistoryrecords.xml");
file.open(QIODevice::ReadOnly);
QString errorStr;
int errorLine;
……
[/Quote]
donwmufromdying 2012-10-16
  • 打赏
  • 举报
回复

void historyrecords::showhisrecords() {

QDomDocument doc;
QFile file("recordshistoryrecords.xml");
file.open(QIODevice::ReadOnly);
QString errorStr;
int errorLine;
int errorCol;
//setContent是将指定的内容指定给QDomDocument解析,
//第一参数可以是QByteArray或者是文件名等
if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol))
{
//如果出错,则会进入这里。errorStr得到的是出错说明
//errorLine和errorCol则是出错的行和列
qDebug() << errorStr << "line: " << errorLine << "col: " << errorCol;
}
file.close();

QDomNode firstNode = doc.firstChild();

qDebug() << qPrintable(firstNode.nodeName()) << qPrintable(firstNode.nodeValue());

}
donwmufromdying 2012-10-16
  • 打赏
  • 举报
回复 1
你文件都没打开,怎么setContent
__阿飞__ 2012-10-16
  • 打赏
  • 举报
回复
谢谢帮助,我今天给解决掉了这个问题,主要问题有如下:
1:没有打开文件这一步骤,多些老兄帮助;
2:在Windows下Qt开发,打开文件要么在资源文件,也就是把你想用的文件统统加到qrc文件里面去,否则单独的采用相对路径,qt都找不到这个文件,更别提要去解析或者去使用这个文件,所以如下的代码才是一直困扰我的地方,今天发现了,就贴上来,以后所有的文件还有各种图片,音视频都得在qrc资源文件里加进来,当然,采用绝对路径也是可以成功的,唯独相对路径不行.

1:
QFile file("recordshistoryrecords.xml");
->这段代码是不行的
2:
QFile file("F:/share/injector-gui2/recordshistoryrecords.xml");
->这段代码是行的
3:
QFile file(":/recordshistoryrecords.xml");
->这段代码是行的,前提是你的文件在qrc里面加进来了.
上面也只是我这里开发所遇到问题总结的,有不对的可以指正,谢谢,共同进步!

[Quote=引用 2 楼 的回复:]

你文件都没打开,怎么setContent
[/Quote]
__阿飞__ 2012-10-15
  • 打赏
  • 举报
回复 1
没人关注么?自己先顶一个

20,241

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧