<< QT && C++
XMLファイルの読み込みと解析
XMLファイルをただのデータではなく、DOM(Document Object Model)を使ってアクセスしたい場合はQDomDocumentクラスを使うと便利です。
このクラスを使う利点はIDを使って要素にアクセスできたり、タグ名から要素を検索したり、要素や属性、本文を後から書き換えできるということです。
例えばファイルダイアログからXMLファイルを読み込んでそれを解析したい場合は次のようにします。
QString filePath = QFileDialog::getOpenFileName(this, tr("Open XML"), "/", tr("XML Files (*.xml)")); QFile file(filePath); file.open(QFile::ReadOnly | QFile::Text); QDomDocument domDocument; domDocument.setContent(file);
上の例ではファイルダイアログから選択したXMLファイルからQDomDocumentにデータを読み込んでいます。
読み込んだデータは解析されて次の種類に分けられます。
データの種類 | 対応するデータクラス |
---|---|
要素 | QDomElement |
属性 | QDomAttr |
文章本体 | QDomText |
コメント | QDomComment |
QDomDocumentの使い方
例えば次のようなXML文章を読み込んだとします。
<?xml version="1.0"encoding="UTF-8"?> <itemList> <item id="0001"> <name>Item1</name> </item> </itemList>
このXML文章にはitemというタグがあるのでそれを取得したい場合は
QDomNodeList domList = domDocument.elementsByTagName("item"); QDomElement element = domList.at(0).toElement();
とすれば要素ノードを取得できます。階層構造をもつので同じように要素の子要素を調べることも出来ます。
もし要素の属性を全て取得したい場合は、
QDomNameNodeMap attrMap = element.attributes(); int attrCount = attrMap.length(); for(int i = 0; i < attrCount; ++i){ QDomAttr attr = attrMap.item(i).toAttr(); qDebug() << "attribute : name = " << attr.name() << " value = " << attr.value(); }
とすればある要素が持つ全ての属性を取得でき、属性名と属性値も知ることができます。
関連項目
© Kaz