• 5792阅读
  • 6回复

xml文件解析 [复制链接]

上一主题 下一主题
离线yxhappy
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-28
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我对xml解析不了解,希望大家帮忙解答一下。
<page value = "sports">
    <pixmap>:/images/sports.png</pixmap>
    <text>Sport</text>
</page>
如果我要解析上面这段xml文件内容,我需要获取value为sport下面的节点的信息。获取pixmap里的:/images/sports.png,和text的Sport,我要怎么做呢?
<RCC>
    <qresource >
    <file>test.xml</file>
    </qresource>
</RCC>

QString filename = ":/test.xml";//是不是xml文件名写在qrc文件里就可以了呀?
    QFile file(filename);
    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        QMessageBox::warning(this, tr("Warning/ Convert"),
            tr("Cannot open soruce file %1:\n%2.")
            .arg(filename)
            .arg(file.errorString()));
        return;
    }
    QXmlStreamReader reader(&file);

    while (!reader.atEnd())
    {
        reader.readNext();
                                          //在这里解析吗?我怎么获得节点呢?一层层的解析呢?
                     }
QXmlStreamReader 提供的api我没明白,对xml初次接触,问的很傻,请大家不要介意。
离线yxhappy
只看该作者 1楼 发表于: 2009-12-28
up!
哪位懂xml解析的,给小妹解答一下啊,急急急!
离线htyoung

只看该作者 2楼 发表于: 2009-12-28
你可以先看一下 QT Example的 streambookmarks的例子
位置
qt4.x/examples/xml/streambookmarks

然后 读一下他的 xbelreader.h .cpp 文件 ,
然后试着改一下 readXBL , readTitle等函数 .
如 readTitle 改为 readPage, 依次 类推。

调一下,很快你就会明白的。
***
QT5
***
离线yb824
只看该作者 3楼 发表于: 2009-12-29
try~~~

QFile file(":test.xml");
    file.open(QIODevice::ReadOnly);

    QDomDocument doc;
    doc.setContent(file.readAll());
    file.close();

    if (!doc.isNull())
    {
        QDomNode rootNode = doc.documentElement();
        if (!rootNode.isNull())
        {
            QDomNode attr = rootNode.attributes().namedItem("value");
            if (!attr.isNull())
            {
                qDebug()<<attr.nodeValue();
            }

            QDomNode pixmapNode = rootNode.childNodes().item(0);
            qDebug()<<pixmapNode.childNodes().item(0).nodeValue();

            QDomNode textNode = rootNode.childNodes().item(1);
            qDebug()<<textNode.childNodes().item(0).nodeValue();
        }

    }
离线xinqingfly

只看该作者 4楼 发表于: 2009-12-29
QXmlStreamReader 方式是不是更快呢?
菜鸟也是鸟
离线318065268
只看该作者 5楼 发表于: 2009-12-29
if(myReader.isStartElement()) {
            if(myReader.name() == "pixmap")
                qDebug()<<"Get the pixmap!"<<myReader.readElementText( );
            else if(myReader.name() == "text")
                qDebug()<<"Get the text :"<<myReader.readElementText( );
}
这就是楼主空白地方大概需要添加的代码,使用name( )函数判断标签的名字,使用readElementText( )获取标签里面的内容。
需要注意的是if判断,必须保证是startElement标签才可以进一步的判断。

至于<page value = "sports">中sports怎么读出来,我的工作中没有涉及到,楼主可以自己查查相关的资料。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线yxhappy
只看该作者 6楼 发表于: 2009-12-29
谢谢大家,xml文件已经可以解析了,不过又出现了新的问题。
大家有空请帮忙看下
http://www.qtcn.org/bbs/read.php?tid=24825
快速回复
限100 字节
 
上一个 下一个