qt如何解析xml文件?
时间: 2024-05-02 21:20:48 浏览: 132
基于Qt的xml解析
3星 · 编辑精心推荐
Qt提供了QDomDocument、QXmlStreamReader和QXmlSimpleReader三种解析XML文件的方法。
1. QDomDocument
QDomDocument是Qt的XML解析器,使用它可以解析XML文件并构建一个文档对象模型(DOM)。它提供了访问XML文件节点的方法,如getElementById()、getElementsByTagName()等。以下是使用QDomDocument解析XML文件的示例:
```cpp
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QDomDocument doc;
if (!doc.setContent(&file)) {
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement();
QDomNodeList list = root.elementsByTagName("book");
for (int i = 0; i < list.size(); i++) {
QDomNode node = list.at(i);
if (node.isElement()) {
QDomElement element = node.toElement();
QString title = element.attribute("title");
QString author = element.attribute("author");
// do something with title and author
}
}
```
2. QXmlStreamReader
QXmlStreamReader是Qt的轻量级XML解析器,它提供了一种基于事件的解析方法,逐行读取XML文件并根据不同的事件(如StartElement、EndElement、Characters等)触发相应的处理函数。以下是使用QXmlStreamReader解析XML文件的示例:
```cpp
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QXmlStreamReader reader(&file);
while (!reader.atEnd()) {
reader.readNext();
if (reader.isStartElement()) {
if (reader.name() == "book") {
QString title = reader.attributes().value("title").toString();
QString author = reader.attributes().value("author").toString();
// do something with title and author
}
}
}
file.close();
```
3. QXmlSimpleReader
QXmlSimpleReader是Qt的SAX(Simple API for XML)解析器,它也是一种基于事件的解析方法,但它比QXmlStreamReader更灵活,可以根据需要自定义处理函数。以下是使用QXmlSimpleReader解析XML文件的示例:
```cpp
class MyXmlHandler : public QXmlDefaultHandler {
public:
bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& attributes) override {
if (qName == "book") {
QString title = attributes.value("title");
QString author = attributes.value("author");
// do something with title and author
}
return true;
}
};
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
MyXmlHandler handler;
QXmlSimpleReader reader;
reader.setContentHandler(&handler);
reader.setErrorHandler(&handler);
reader.parse(&file);
file.close();
```
以上三种方法各有优缺点,具体应根据需求选择。
阅读全文