Qt 操作xml (pugixml)

pugixml的官网   https://pugixml.org/   在github上下载例程中有使用手册

<?xml version="1.0"?>

  <Students>
    <Student id="2018" name="chen" />
    <cyc len="100" />
 </Students>

1、打开xml文件

pugi::xml_document doc ;
doc.load_file("map.xml");

2、添加申明

    pugi::xml_document doc ;
    pugi::xml_node pre = doc.prepend_child(pugi::node_declaration);
    pre.append_attribute("version") = "1.0";
    pre.append_attribute("encoding") = "utf-8";
 
 doc.save_file("./map.xml")

3、添加节点及属性

 pugi::xml_document doc ;
 doc.load_file("map.xml");
    pugi::xml_node xstudents = doc.append_child("Students");
    xstudents.append_child(pugi::node_comment).set_value("Students!");
    pugi::xml_node xstudent = xstudents.append_child("Student");
    pugi::xml_attribute xstudent_id = xstudent.append_attribute("id");
    xstudent_id.set_value("2018");
    pugi::xml_attribute xstudent_name = xstudent.append_attribute("name");
    xstudent_name.set_value("chen");
    xstudents.append_child("cyc");
 
 doc.child("Students").child("cyc").append_attribute("len").set_value("100"); 
 doc.save_file("./map.xml")

4、移动

    doc.load_file("./map.xml");
    doc.child("Students").append_move(doc.child("Students").child("cyc"));
    doc.child("Students").prepend_move(doc.child("Students").child("cyc"));
    doc.child("Students").insert_move_before(doc.child("Students").child("cyc").next_sibling(),doc.child("Students").child("cyc"));
 

5、读取:

 pugi::xml_node infos = doc.child("Students");
    for(pugi::xml_node info = infos.first_child() ; info; info = info.next_sibling())
    {
        for(pugi::xml_attribute attr = info.first_attribute(); attr; attr = attr.next_attribute())
        {
            qDebug()<<info.name()<<attr.name()<<attr.value();
            if(QString(info.name()) == "cyc")
            {
                qDebug()<<"@@@@";
            }
        }
    }

6、上下节点

doc.child("Students").child("cyc").next_sibling()//下一个节点
doc.child("Students").child("cyc").before_sibling()//上一个节点
 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中提供了QXmlStreamReader和QXmlStreamWriter两个类来读写XML文件,可以根据需要自己封装一个操作XML文件的类。以下是一个简单的封装类XmlHelper,可以实现读取和写入XML文件的基本操作。 ``` #include <QXmlStreamReader> #include <QXmlStreamWriter> #include <QFile> class XmlHelper { public: XmlHelper(const QString& fileName) { m_fileName = fileName; } // 读取XML文件中指定节点的值 QString readValue(const QString& nodeName) { QFile file(m_fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QXmlStreamReader reader(&file); while (!reader.atEnd()) { if (reader.isStartElement() && reader.name() == nodeName) { reader.readNext(); return reader.text().toString(); } else { reader.readNext(); } } return QString(); } // 写入XML文件中指定节点的值 void writeValue(const QString& nodeName, const QString& value) { QFile file(m_fileName); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) return; QXmlStreamReader reader(&file); QXmlStreamWriter writer(&file); writer.setAutoFormatting(true); while (!reader.atEnd()) { if (reader.isStartElement() && reader.name() == nodeName) { // 找到节点,修改节点的值 reader.readNext(); writer.writeStartElement(nodeName); writer.writeCharacters(value); writer.writeEndElement(); } else { // 没有找到节点,继续向下读取 writer.writeCurrentToken(reader); reader.readNext(); } } // 文件中没有指定节点,添加节点 if (reader.hasError()) return; writer.writeStartElement(nodeName); writer.writeCharacters(value); writer.writeEndElement(); } private: QString m_fileName; }; ``` 使用示例: ``` XmlHelper helper("config.xml"); // 读取XML文件中的值 QString name = helper.readValue("name"); QString age = helper.readValue("age"); // 写入XML文件中的值 helper.writeValue("name", "Tom"); helper.writeValue("age", "20"); ``` 以上代码是一个简单的示例,实际应用中还需根据实际需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值