我的问题是,我有一个表示为的大型 XML 样式文件QDomDocument,我需要访问 XML 中多个位置上的某些标签
我的 XML 看起来像这样
<Mat1>
<Name>Mat_1</Name>
<Properties>
<Size>10</Size>
<SizeMod>G</SizeMod>
</Properties>
</Mat1>
<Mat2>
<Name>Mat_2</Name>
<Properties>
<Size>15</Size>
<SizeMod>k</SizeMod>
</Properties>
</Mat2>
Run Code Online (Sandbox Code Playgroud)
我需要访问所有出现的“SizeMod”和“Size”。问题是文件的布局将来可能会定期更改,我希望我的代码适用于文件的所有版本。
目前,我只是使用多个 for 循环遍历所有 childNode,直到达到所需的深度,然后使用 if 语句检查是否处于正确的节点。
但这似乎是一种糟糕的方法。
正如@hank 所评论的,您应该使用QDomDocument::elementsByTagName(const QString &tagname)来获取文档中名称为 的元素tagname。
然后,遍历节点以获取每个QDomNode。最后,将 转换QDomNode为QDomElement.
我们打印元素文本和标签名称的示例:
#include <QtXml>
#include <QtCore>
int main()
{
QFile file(":/myxml.xml");
file.open(QFile::ReadOnly|QFile::Text);
QDomDocument dom;
QString error;
int line, column;
if(!dom.setContent(&file, &error, &line, &column)) {
qDebug() << "Error:" << error << "in line " << line << "column" << column;
return -1;
}
QDomNodeList nodes = dom.elementsByTagName("Size");
for(int i = 0; i < nodes.count(); i++)
{
QDomNode elm = nodes.at(i);
if(elm.isElement())
{
qDebug() << elm.toElement().tagName()
<< " = "
<< elm.toElement().text();
}
}
nodes = dom.elementsByTagName("SizeMod");
for(int i = 0; i < nodes.count(); i++)
{
QDomNode elm = nodes.at(i);
if(elm.isElement())
{
qDebug() << elm.toElement().tagName()
<< " = "
<< elm.toElement().text();
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5453 次 |
| 最近记录: |