• 5881阅读
  • 5回复

[提问]为什么用QT解析不了中文的XML [复制链接]

上一主题 下一主题
离线wangranci
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-07
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
关键词: QT4求助问题
windows下装的的QT SDK
  程序对着教程写的  如下:

    QDomDocument doc;//建立QDomDocument类对象,代表xml文档
    QFile file("my.xml");//建立指向"my.xml”文件的QFile对象
    if(!file.open(QIODevice::ReadOnly)) return;//以只读方式打开
    if(!doc.setContent(&file)){file.close();return;}//将文件内容读到doc中
    file.close();//关闭文件
    QDomNode firstNode=doc.firstChild();//获得第一个节点
    qDebug()<<qPrintable(firstNode.nodeName())//输出xml说明
    <<qPrintable(firstNode.nodeValue());
    QDomElement docElem=doc.documentElement();//返回根元素
    QDomNode n=docElem.firstChild();//返回根节点的第一个子节点
    while(!n.isNull())//如果节点不为空
    {
    if(n.isElement())
    {
    QDomElement e=n.toElement();//将其转换为元素
    qDebug()<<qPrintable(e.tagName())//返回元素标记
           <<qPrintable(e.attribute(tr("id")));//返回元素id属性的值
    QDomNodeList list = e.childNodes();//获得元素e的所有子节点列表
    for(int i=0;i<list.count();i++)//遍历该列表
    {
    QDomNode node=list.at(i);
    if(node.isElement())
    qDebug()<<" "<<qPrintable(node.toElement().tagName())
    <<qPrintable(node.toElement().text());
    }
    }
    n=n.nextSibling();//下一个兄弟节点
    }

main.cpp中加代码:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book id="01">
       <title>Qt</title>
       <author>Zhangsan</author>
    </book>
    <book id="02">
       <title>Linux</title>
       <author>Lisi</author>
   </book>
</library>
可以正常解析,为什么换成
<?xml version="1.0" encoding="UTF-8"?>
<书库>
    <图书 id="01">
       <书名>Qt</书名>
       <作者>Zhangsan</作者>
    </图书>
    <图书 id="02">
       <书名>Linux</书名>
       <作者>Lisi</作者>
   </图书>
</书库>
就无法显示结果了。  求助啊
离线uidab

只看该作者 1楼 发表于: 2012-06-07
是不是这里QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 把它改成utf-8。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线roywillow

只看该作者 2楼 发表于: 2012-06-07
你的xml文件保存成了什么编码格式?utf-8?
另外代码中的标签文本用的是中文还是英文?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wangranci
只看该作者 3楼 发表于: 2012-06-08
回 1楼(uidab) 的帖子
试过了   不行啊
离线wangranci
只看该作者 4楼 发表于: 2012-06-08
回 2楼(roywillow) 的帖子
我用记事本编辑的  声明是UTF-8啊  
标签文本 指的是什么
离线wangranci
只看该作者 5楼 发表于: 2012-06-08
谢谢大家   解决了,我自己用QT生成中文XML文件的时候  第一行声明中忘记加空格了。
快速回复
限100 字节
 
上一个 下一个