• 6558阅读
  • 14回复

[提问]不传参数,如果读取出xml文件中的属性 [复制链接]

上一主题 下一主题
离线sixes
 
只看楼主 倒序阅读 楼主  发表于: 2012-01-03
关键词: 文件参数xml
<?xml version="1.0" encoding="utf-8"?>  
<root>
        <allianceIncense max_rec="50">
                <incense type="1" bufferId="610001" cost="1000" unit="1" cultivation="88"  constructionDegree="100" coinOff="10"/>
                <incense type="2" bufferId="610002" cost="20"   unit="3" cultivation="176" constructionDegree="200" coinOff="15"/>
                <incense type="3" bufferId="610003" cost="100"  unit="3" cultivation="440" constructionDegree="500" coinOff="30"/>
        </allianceIncense>
</root>

我想实现这样的一个功能,输入上面这个xml文件
然后自动获取出:
有一个allianceIncense的node,node有一个属性为max_rec,其值为50.

用dom解析的话,得传入“max_rec",然后得到50.
能不能自动分析出是哪些属性,属性值,有哪些结点。
等高手指点。


QDomElement docElem = doc.documentElement();  //返回根元素    
QDomNode n = docElem.firstChild().firstChild();   //返回根节点的第一个子节点  
while(!n.isNull())  
{   //如果节点不为空  
if (n.isElement())  //如果节点是元素  
{    QDomElement e = n.toElement();    
qDebug(qPrintable(e.tagName()));    
QDomNamedNodeMap map = e.attributes();
e.attribute("type");    //这里必须传入type
}
}
离线sixes
只看该作者 1楼 发表于: 2012-01-03

肿么一个人都木有回啊啊啊。
离线XChinux

只看该作者 2楼 发表于: 2012-01-04
不传属性名称如何得到属性值?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线jdwx

只看该作者 3楼 发表于: 2012-01-04
完全可以,如果文件格式固定,可以自己造一个解析方法(不用dom)。
也就是读文件,查找字符串什么的。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线sixes
只看该作者 4楼 发表于: 2012-01-04
回 2楼(XChinux) 的帖子

QDomNamedNodeMap map = e.attributes();

弱弱地问下,这个函数是把所有的属性都存储在map里,
然后通过name去取值。
但是,没有提供一个方法,取得全部的name。
是这样的吗?

有其他的方法吗?

我是想写一个小工具,自动提取出所有的结点、属性,
再根据这些信息去自动生成c++结构、类。

谢谢了。
离线sixes
只看该作者 5楼 发表于: 2012-01-04
回 3楼(jdwx) 的帖子
格式不固定的,但都是xml文件,属性、结点不一定一样。
离线sixes
只看该作者 6楼 发表于: 2012-01-04

用c++库libxml可以实现这个功能吗?
或者其他库?
离线sixes
只看该作者 7楼 发表于: 2012-01-04

高手在哪里在哪里。
离线sixes
只看该作者 8楼 发表于: 2012-01-04

离线sixes
只看该作者 9楼 发表于: 2012-01-05
离线benbenmajia

只看该作者 10楼 发表于: 2012-01-05
可以借鉴其他解析XML的做法,你可以搜索下各种常用的解析方法的不同之处,归根到底还是存储数据,格式不同而已
安然.....
离线roywillow

只看该作者 11楼 发表于: 2012-01-05
QDomNamedNodeMap QDomElement::attributes () const
怎么感觉这个好像是能满足你的需要
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线sixes
只看该作者 12楼 发表于: 2012-01-05

啊啊啊,有木有指点一下吖
离线XChinux

只看该作者 13楼 发表于: 2012-01-05
QMap类有keys(),这个能获取一个节点的所有属性名。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sixes
只看该作者 14楼 发表于: 2012-01-06

快速回复
限100 字节
 
上一个 下一个