如何在Qt中导入XML数据
我对如何从XML文件导入数据感到困惑。 XML文件的结构如下所示:如何在Qt中导入XML数据,xml,qt,qtxml,Xml,Qt,Qtxml,我对如何从XML文件导入数据感到困惑。 XML文件的结构如下所示: <Workflow> <ItemList1> <Item1>1</Item1> <otherItem>1</otherItem> <anotherItem>1</anotherItem> ........................ &l
<Workflow>
<ItemList1>
<Item1>1</Item1>
<otherItem>1</otherItem>
<anotherItem>1</anotherItem>
........................
</ItemList1>
<TaskLists>
<NumberOfTasks>2</NumberOfTasks>
<Task_1>
<description>"description"</description>
<position>"x, y"</position>
<name>"name"</name>
<tagListNumberOfItems>2</tagListNumberOfItems>
<tagList>
<subTag>"text"</subTag>
<other_subTag>"text"</other_subTag>
</tagList>
</Task_1>
<Task_2>
<description>"description"</description>
<position>"x,y"</position>
<name>"name"</name>
<tagListNumberOfItems>4</tagListNumberOfItems>
<tagList>
<different_subTag>"text"</different_subTag>
<other_different_subTag>"text"</other_different_subTag>
<a_3rd_subTag>"text"</a_3rd_subTag>
<a_4th_subTag>"text"</a_4th_subTag>
</tagList>
</Task_2>
</TaskLists>
</Workflow>
1.
1.
1.
........................
2.
“说明”
“x,y”
“姓名”
2.
“文本”
“文本”
“说明”
“x,y”
“姓名”
4.
“文本”
“文本”
“文本”
“文本”
我应该如何导入这些数据?
谢谢 看看QtXml模块 我认为这门课能满足你的需要:
它允许您以树的形式加载XML文件,您可以读取或修改该文件。查看QtXml模块 我认为这门课能满足你的需要:
它允许您以树的形式加载XML文件,您可以读取或修改它。最简单的方法是查看。它利用了 从文档:
QXmlStreamReader xml;
...
while (!xml.atEnd()) {
xml.readNext();
... // do processing
}
if (xml.hasError()) {
... // do error handling
}
从示例中可以看出:
bool XbelReader::read(QIODevice *device)
{
xml.setDevice(device);
if (xml.readNextStartElement()) {
if (xml.name() == "xbel" && xml.attributes().value("version") == "1.0")
readXBEL();
else
xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
}
return !xml.error();
}
void XbelReader::readXBEL()
{
Q_ASSERT(xml.isStartElement() && xml.name() == "xbel");
while (xml.readNextStartElement()) {
if (xml.name() == "folder")
readFolder(0);
else if (xml.name() == "bookmark")
readBookmark(0);
else if (xml.name() == "separator")
readSeparator(0);
else
xml.skipCurrentElement();
}
}
您可以使用DOM、SAX或XmlStream。看一看
因此,您可以读取xml,然后根据xml文件提供的内容创建/填充对象/运行时。最简单的方法是查看。它利用了 从文档:
QXmlStreamReader xml;
...
while (!xml.atEnd()) {
xml.readNext();
... // do processing
}
if (xml.hasError()) {
... // do error handling
}
从示例中可以看出:
bool XbelReader::read(QIODevice *device)
{
xml.setDevice(device);
if (xml.readNextStartElement()) {
if (xml.name() == "xbel" && xml.attributes().value("version") == "1.0")
readXBEL();
else
xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
}
return !xml.error();
}
void XbelReader::readXBEL()
{
Q_ASSERT(xml.isStartElement() && xml.name() == "xbel");
while (xml.readNextStartElement()) {
if (xml.name() == "folder")
readFolder(0);
else if (xml.name() == "bookmark")
readBookmark(0);
else if (xml.name() == "separator")
readSeparator(0);
else
xml.skipCurrentElement();
}
}
您可以使用DOM、SAX或XmlStream。看一看
因此,您读取xml,然后根据xml文件提供的内容创建/填充对象/运行时。我知道您在问这个问题,因为您无法在任何地方获得用于读取xml文件的工作示例代码。下面的代码可以帮助您做到这一点
QString fileName = "yourfile.xml";
QFile file(fileName);
if(file.exists()) {
QDomDocument doc( "XMLFile" );
if( !file.open( QIODevice::ReadOnly ) )
return false;
if( !doc.setContent( &file ) )
{
file.close();
return false;
}
file.close();
QDomElement root = doc.documentElement();
QDomNode n = root.firstChild();
while( !n.isNull() )
{
QDomElement e = n.toElement();
if( !e.isNull() )
{
qDebug() << e.tagName(); //this gives you the name of the tag
qDebug() << e.namedItem("ChildTag").toElement().text(); //this gives you the node value of a tag.
}
n = n.nextSibling();
}
} else {
return false;
}
return false;
}
QString fileName=“yourfile.xml”;
QFile文件(文件名);
if(file.exists()){
QDomDocument文件(“XMLFile”);
如果(!file.open(QIODevice::ReadOnly))
返回false;
如果(!doc.setContent(&file))
{
file.close();
返回false;
}
file.close();
QdomeElement root=doc.documentElement();
QDomNode n=root.firstChild();
而(!n.isNull())
{
QDomElement e=n.toElement();
如果(!e.isNull())
{
qDebug()我知道您提出这个问题是因为您无法在任何地方获得用于读取XML文件的工作示例代码
QString fileName = "yourfile.xml";
QFile file(fileName);
if(file.exists()) {
QDomDocument doc( "XMLFile" );
if( !file.open( QIODevice::ReadOnly ) )
return false;
if( !doc.setContent( &file ) )
{
file.close();
return false;
}
file.close();
QDomElement root = doc.documentElement();
QDomNode n = root.firstChild();
while( !n.isNull() )
{
QDomElement e = n.toElement();
if( !e.isNull() )
{
qDebug() << e.tagName(); //this gives you the name of the tag
qDebug() << e.namedItem("ChildTag").toElement().text(); //this gives you the node value of a tag.
}
n = n.nextSibling();
}
} else {
return false;
}
return false;
}
QString fileName=“yourfile.xml”;
QFile文件(文件名);
if(file.exists()){
QDomDocument文件(“XMLFile”);
如果(!file.open(QIODevice::ReadOnly))
返回false;
如果(!doc.setContent(&file))
{
file.close();
返回false;
}
file.close();
QdomeElement root=doc.documentElement();
QDomNode n=root.firstChild();
而(!n.isNull())
{
QDomElement e=n.toElement();
如果(!e.isNull())
{
qDebug()