Qt之xml文件解析


XML文件簡介

  • XML - EXtensible Markup Language,可拓展標記語言

Qt中加載XML模塊

.pro 文件中添加

QT += xml

Qt的XML訪問方式

引用:https://blog.csdn.net/liang19890820/article/details/52805902

Qt 提供了兩種訪問 XML 文檔的方式:DOM 和 SAX。

  • DOM 方式:將 XML 文檔轉換為樹形結構存儲到內存中,再進行讀取,消耗的內存比較多。此外,由於文檔都已經存儲到內存,所以需要頻繁實現修改等操作時,使用起來比較方便。
  • SAX 方式:相比於 DOM,SAX 是一種速度更快,更有效的方法,它逐行掃描文檔,一邊掃描一邊解析(由於應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中,這對於大型文檔的解析是個巨大優勢)。而且相比於 DOM,SAX 可以在解析文檔的任意時刻停止解析。但操作復雜,很難修改 XML 數據。

DOM

描述
QDomAttr 表示一個 QDomElement 的屬性
QDomCDATASection 表示一個 XML CDATA 部分
QDomCharacterData 表示 DOM 中的一個通用字符串
QDomComment 表示一個 XML 注釋
QDomDocument 表示一個 XML 文檔
QDomDocumentFragment QDomNodes 樹,通常不是一個完整的 QDomDocument
QDomDocumentType 表示文檔樹中的 DTD
QDomElement 表示 DOM 樹中的一個元素
QDomEntity 代表一個 XML 實體
QDomEntityReference 代表一個 XML 實體引用
QDomImplementation DOM 實現的功能的信息
QDomNamedNodeMap 包含一個節點集合,節點可以通過名字來訪問
QDomNode 一個 DOM 樹中所有節點的基類
QDomNodeList QDomNode 對象列表
QDomNotation 代表一個 XML 表示法
QDomProcessingInstruction 代表 XML 處理指令
QDomText 表示解析的 XML 文檔中的文本數據

說明:

  • XML的每級元素(QDomElement),也可以稱之為結點(QDomNode),QDomElement繼承自QDomNode;
  • QDomNode可以使用toElement()方法轉換成QDomElement;

常用方法

QDomDocument doc("test_xml");
QFile xml_file("FiltersConf.xml");
if(!doc.setContent(&xml_file))	//也可以傳入字符串
{
	qDebug()<<"set content fail";
	return 0;
}
QDomElement root_element = doc.documentElement();//獲取xml文件的根元素
qDebug()<<root_element.tagName();	//使用tagName()方法獲取元素的標簽名
QDomNode node = root_element.firstChild();//獲取第一個子結點
QString attr = node.toElement().attribute("name");//獲取屬性
while(!node.isNull())
{
	qDebug()<<"-"<<node.toElement().tagName();
	node = node.nextSibling();	//獲取同級的結點
}

寫入XML

QDomDocument document;
//xml頭部的<?xml version="1.0" encoding="UTF-8"?>
QDomProcessingInstruction instruction = document.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
document.appendChild(instruction);
QDomElement root_node = document.createElement("transpond");//創建根結點
document.appendChild(root_node);    //添加根結點

QDomElement element = document.createElement("machine");//創建元素結點
element.setAttribute("type", "machine");
root_node.appendChild(element);//元素結點添加到根結點下

QDomElement item_element = document.createElement("machine-item");//創建item結點
item_element.setAttribute("type", "11");
item_element.setAttribute("name", "22");
item_element.setAttribute("device-code", "33");
item_element.setAttribute("ip", "44");
item_element.setAttribute("sync-time", "55");

//寫入文件
QFile file(pConfigManager->GetMachineInfoFile());
if(!file.open(QIODevice::ReadWrite | QIODevice::Truncate))
{
	return false;
}
QTextStream in(&file);
document.save(in, 4);
file.close();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM