我对xml不太好,但我的基本xml文件看起来像这样。
<MAIN_HEADER>
<HEADER>
<TITLE>my_title</TITLE>
<AUTOR>DNL</AUTOR>
<NAME>John</NAME>
<AGE>abc</AGE>
<SEX>male</SEX>
<PLACE>abc</PLACE>
<INI_FILE>abc</INI_FILE>
</HEADER>
我想要做的是,我需要找到2-3个标签,例如NAME&amp;性别 并将属性(John,Male)存储在另一个变量中。
直到现在,我已经能够让它读取xml文件了。
void MainWindow::XMLParser()
{
QString path=MainWindow::getWorkingDirectory()+"\\0_Config\\";
QString string;
string = path + ui->ConfigFiles_combo->currentText(); \\THIS IS WHERE´IT DETERMINES WHICH XML FILE IT IS
qDebug()<<string;
QDomDocument document;
//load the file
QFile file(string);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<"Failed to open the file";
}
else
{
if(!document.setContent(false))
{
qDebug()<<"Failed to load document";
}
file.close();
}
QDomElement root = document.firstChildElement();
qDebug()<<"finished";
}
如何让它搜索确切的标签并将其存储在另一个变量中?
答案 0 :(得分:2)
为什么你再次拥有setContent(false)
?您似乎刚刚复制了 The Badger 的代码。试试这个。
void MainWindow::XMLParser()
{
// don't worry about path separator, Qt will take of it
QString string = MainWindow::getWorkingDirectory() + "/0_Config/" + ui->ConfigFiles_combo->currentText();
qDebug()<<string;
QDomDocument document;
//load the file
QFile xmlFile(string);
if (!xmlFile.exists() || !xmlFile.open(QFile::ReadOnly | QFile::Text)) {
qDebug() << "Check your file";
return;
}
QDomDocument domDocument;
domDocument.setContent(&xmlFile);
QDomElement topElement = domDocument.documentElement();
QDomNode domNode = topElement.firstChild();
while (!domNode.isNull()) {
QDomElement domElement = domNode.toElement();
if (!domElement.isNull()) {
//qDebug() << domElement.tagName();
if (domElement.tagName() == "HEADER") {
QDomNode node = domElement.firstChild();
while (!node.isNull()) {
QDomElement element = node.toElement();
if (!element.isNull()) {
const QString tagName(element.tagName());
if (tagName == "NAME") {
qDebug() << "Name is:" << element.text();
} else if (tagName == "SEX") {
qDebug() << "Sex is:" << element.text();
}
}
node = node.nextSibling();
}
}
}
domNode = domNode.nextSibling();
}
}
这是我的控制台输出
Name is: "John"
Sex is: "male"
Name is: "Doe"
Sex is: "male"
答案 1 :(得分:0)
看看QDomDocument文档,示例应该足够好了:我在假设文件被打开(你的setContent()函数调用不正确)。
if (document.setContent(&file) == false) {
file.close();
return;
}
QDomElement docElem = doc.documentElement();
QDomElement headerElement = docElem.firstChildElement("HEADER");
if(headerElement.isNUll() == true) {
return;
}
/* Get the name */
QDomElement nameElement = headerElement.firstChildElement("NAME");
QString name = nameElement.text();
/* Get the sex */
QDomElement sexElement = headerElement.firstChildElement("SEX");
QString sex = sexElement.text();
编辑:查看QDomElement上的文档,还有一些代码也可以使用。我上面的代码看起来类似于描述中的最后一个代码段。