XML编辑工具

【标题】XML编辑工具

【开发环境】Qt 5.2.0,  C++

【概要设计】使用QT的视图/模型结构、treeview控件以树形结构显示所要操作的XML文件,并实现修改和保存功能

【详细设计】

主要包含 node.h(节点类)、model.h(模型类)、xml.h(xml操作类)

node.h文件

使用两个Qstring字符串变量作为类成员,分别用于表示XML文件的节点名和节点值,一个Node节点表示父节点和一个Qlist列表用于存储孩子节点

#ifndef NODE_H
#define NODE_H

#include <QList>
#include <QString>

class Node
{
public:
    Node(QString Nodename,  QString Nodetext);
    Node();
    ~Node();
    QString Nodename;
    QString Nodetext;
    Node *parent;
    QList<Node *> children;

};
#endif // NODE_H

构造函数:

 8 Node::Node()
 9 {
10     this->Nodename = "";
11     this->Nodetext = "";
12     parent = 0;
13 }

model.h文件

继承自QAbstractItemModel类,按照Qt模型的要求实现相应的函数

#ifndef MODEL_H
#define MODEL_H

#include <QAbstractItemModel>
#include "node.h"

class Model : public QAbstractItemModel
{
public:
    Model(QObject *parent = 0);
    ~Model();
    void setRootNode(Node *node);
    QModelIndex index(int row, int column,
                      const QModelIndex &parent) const;
    QModelIndex parent(const QModelIndex &child) const;
    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation,
                        int role) const;

private:
    Node *nodeFromIndex(const QModelIndex &index) const;
    Node *rootNode;
};

data函数,如果是第一列则显示节点名,如果是第二列,则显示节点的值

 1 QVariant Model::data(const QModelIndex &index, int role) const
 2 {
 3     if (role != Qt::DisplayRole)
 4         return QVariant();
 6     Node *node = nodeFromIndex(index);
 8     if (index.column() == 0)
 9         return node->Nodename;
10     else if (index.column() == 1)
11         return node->Nodetext;
12 }
13 

将XML加载到内存中

    QFile file("F:/538.xml");
    if(!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(this, tr("error!"), "open file faild!");
    }
    QDomDocument doc;
    if(!doc.setContent(&file))
    {
        file.close();
        QMessageBox::information(this, tr("error!"), "add xml faild!");
    }
    file.close();

  

将XML读取到模型中

将读取到的XML元素名和元素值依次赋值给node节点的nodename和nodetext

  QDomNode n = doc.documentElement().firstChild();
    while(!n.isNull())
    {
        QDomElement e = n.toElement();
        Node *node = new Node();
        node->Nodename = n.toElement().tagName();
        node->Nodetext = n.toElement().text();
        RootNode->children += node;
        if(n.hasChildNodes())
        {
          treal(n, node);
        }
        n = n.nextSibling();
    }

修改XML

将点击treeview视图时产生的索引转换成节点,用一个label控件和一个lineEdit控件分别显示节点名和节点值

当用户将lineEidt中内容编辑完成时点击Update按钮,将lineEdit的文本信息赋值给模型中所要编辑节点的nodetext;

 1 void MainWindow::on_treeView_clicked(const QModelIndex &index)
 2 {
 3     Node *node = new Node();
 4     node = static_cast<Node *>(index.internalPointer());
 5     ui->label->setText(node->Nodename + ":");
 6     ui->lineEdit->setText(node->Nodetext);
 7     totalindex = index;
 8 }
 9
10 void MainWindow::on_Update_clicked()
11 {
12     Node *node = new Node();
13     node = static_cast<Node *>(totalindex.internalPointer());
14     node->Nodetext = ui->lineEdit->text();
15     QDomNodeList list = doc.elementsByTagName(node->Nodename);
16     list.at(0).setNodeValue(ui->lineEdit->text());
17
18 }
时间: 2024-11-05 02:35:16

XML编辑工具的相关文章

[下载]Oracle LOB字段编辑工具

OraLobEditor 是Oracle LOB (CLOB, BLOB) 字段编辑工具. 查看.编辑LOB (CLOB, BLOB)字段(plain text, RTF, image, hex, html, xml). 支持图片格式(JPEG, GIF, BMP, PNG, TIFF).在十六进制方式中编辑 LOB (CLOB, BLOB) 字段. 查看.在文本编辑器中编辑长字符串(Char, Varchar2)字段. 在十六进制方式中编辑字符串(Char,Varchar2)字段. 下载地址:

比较全的XML系列工具 可以轻松实现排版、转换和打印!

XML系列 -------------------------------------------------------------------------------- 1.Xsl Formatter-XML可视化工具 是根据W3C策划并推广的xsL式样开发的XML排版和打印转换软件,可以很好的显示和打印XML文档,并可将其转换为PDF文件. 功能: (1)实现XSL样式的排版功能,可将xml内容多版面显示,实现内容精准打印. (2)可以向PDF文件格式转换,在无Adobo Acrobat环

【Telerik控件学习】-建立自己的图形编辑工具(Diagram)

Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定义图形元素容器(Shape)的基类,继承RadDiagramShape,并重写Serialize和Deserialize方法,来定制将来对象的保存或复制. /// <summary> /// 图形Shape控件 /// </summary> public class FigureSha

XML数据录入工具

为了手机端使用XML数据库,写了一个xml录入工具. XML格式如下: <?xml version="1.0" encoding="gb2312"?><Trouble> <Classification text="a" id="10000"> <Phenomena text="b" id="10100"> <Models text=&

PDF编辑工具——PDF Desktop Converter 4 Professional

管理和操作PDF的工具.PDF Desktop Converter 4 Professional可以生成,转换,提取,组合,分割合并PDF.新增加的OCR功能可以将扫描后的文件转变成可以检索和编辑的PDF.以上这些功能只需要一个软件就可以全部实现. 软件特点 1. 快速,准确,简单的生成PDF. * Add-in按钮 -从Microsoft应用程序立即生成PDF -无需Microsoft应用程序,可以立即将PDF转换成Word,Excel. * 采用密码对PDF文件中的敏感信息进行控制,限制浏览

struts2设置index.action为主页(另:web.xml编辑卡死问题解决)

本来是弄拦截器的问题,结果弄主页的时候,还是发现了问题. 公司网站的项目里面,是用index.action作为主页的,访问WEB-INF里面的html文件.可是我设置的却不成功,追根到底,一个原因,struts2比较特殊,struts.xml里面必须多配置一个request和response. <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" versio

Fedora 25 (linux平台)开源的PDF文件编辑工具——PDF mod

Fedora 25 (linux平台)开源的PDF文件编辑工具--PDF mod PDF文件具有非常好的跨平台属性,无论你在哪个平台用哪个PDF阅读器打开,其格式是永远不变的.但是缺点也很明显,文本文件或者图文混排文件,要想再次编辑就有很大难度了. Document viewer作为fedora 25默认PDF阅读器,用来阅读PDF文件没什么大问题,但是如果要修改一下PDF就显得不够强大了. PDF Mod是一款编辑 PDF 文件很方便的工具.包名:pdfmod PDF Mod 让用户可以移除页

几个有用的软件开发工具之——代码编辑工具

1 代码编辑工具 1.1 source insight Source insight 是一款很优秀的代码编辑软件,支持创建project(同一时候支持网络创建),语法着色,词语联想,它的代码搜索功能很强大,很适合阅读代码. 下图是Source insight的全视图: 左边为变量和參数列表: 右边为project文件列表: 右下角为函数调用树: 左下角为鼠标所指变量或者函数的定义 中间为正文,黄色表示这一行刚刚更改,还未保存.假设保存,则更改行会显示为灰色. 以下介绍一下工具的搜索功能: 搜索功

常见的web在线编辑工具

         在线编辑工具      JSbin http://jsbin.com/优点:不需要登录,即发即预览缺点:速度不靠谱 RUN JShttp://runjs.cn/code优点:国内访问速度快,可以上传图片(左下角)缺点:需要登录,用户名