Qt通过dom方式修改xml

DOM是一种解析由万维网协会(W3C)所开发的XML文档的标准应用程序编程接口。Qt提供一套用于读取、操作和编写XML文档的非验证型二级DOM实现。

DOM把XML文件表示成内存中的一棵树。我们可以按需要遍历这个DOM树,也可以修改这个树并把它作为XML文件保存到磁盘中。

让我们考虑如下这个XML文档:

<doc>

         <quote>Scio me nihil scire</quote>

         <translation>I know that I know nothing></translation>

</doc>

它对于如下所示的DOM树:

Document

       Element(doc)

              Element(quote)

                     Text(“Scio me nihil scire”)

              Element(translation)

                     Text(“I know that I know nothing”)

这个DOM树包含不同类型的节点。例如,Element节点对应打开标签以及与它匹配的关闭标签。在这两个标签之间的内容则作为这个Element节点的子节点出现。 (注意蓝色字体)

上面的介绍主要是用来说明dom树的结构情况,下面则进入正题看如何通过qt来达到修改xml文件的目的。本文中主要说明如何修改xml属性值以及节点值,

修改属性值的代码如下:

bool 
QXmlEdit
::SetAValue
(const 
QString 
&key
, const 
QVariant 
&value
)
{
try
{
QString tag ;
QString attName ;
QStringList sl =key .split ("/" );
tag = sl .at (0);
attName = sl .at (1);

QDomElement docElem = doc .documentElement ();
QDomNodeList nodeList = docElem .elementsByTagName (tag );
if (nodeList .count () >0 )
{
QDomElement el = nodeList .at (0).toElement ();
el .setAttribute (attName ,value .toString ()); //设置属性值
            
QFile file
(fileName
);
if (!file .open (QIODevice ::WriteOnly | QIODevice ::Text ))
{
return false ;
}
QTextStream out (&file );
doc .save (out ,4);
}
return true ;
}
catch (...)
{
return false ;
}
}
修改节点值的代码如下:
bool 
QXmlEdit
::SetTValue
(const 
QString 
&key
, const 
QVariant 
&value
)
{
try
{
QDomElement docElem = doc .documentElement ();
QDomNodeList nodeList = docElem .elementsByTagName (key );
if (nodeList .count () >0 )
{
QDomElement el = nodeList .at (0).toElement (); //tag为key的节点
QDomNode oldnode = el .firstChild (); //标签之间的内容作为节点的子节点出现,得到原来的子节点
el .firstChild ().setNodeValue (value .toString ()); //用提供的value值来设置子节点的内容
            
QDomNode newnode 
= el
.firstChild
();               //值修改过后的子节点
            
el
.replaceChild
(newnode
,oldnode
);                 //调用节点的replaceChild方法实现修改功能

QFile file (fileName );
if (!file .open (QIODevice ::WriteOnly | QIODevice ::Text ))
{
return false ;
}
QTextStream out (&file );
doc .save (out ,4);
}
return true ;
}
catch (...)
{
return false ;
}
}

至此我们就实现了修改xml属性及text的功能。

 

看完了,访问下我做的网站作为支持吧 www.xiabanl.com 下班族论坛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值