gpt4 book ai didi

c++ - QXmlStreamReader读取空文本,文档肯定不为空

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:51 24 4
gpt4 key购买 nike

我正在使用 QXmlStreamReaderQXmlStreamWriter 在我的应用程序中读取和写入 XML 文件。

我的示例 XML 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Senders>
<Sender>
<Name>COMPANY XYZ</Name>
<Street>Random</Street>
<BuildingNumber>23D</BuildingNumber>
<LocalNumber>123</LocalNumber>
<CityCode>3434-21</CityCode>
<City>New York</City>
</Sender>
</Senders>

它是用我的代码写的。基本上,我在编写 XML 文件时没有问题,但在编写后尝试阅读它们时遇到了一些麻烦。这是我的代码,它打印出空值(XML 文件不为空)。

#include "mainwindow.h"
#include <QApplication>
#include <QtCore>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QFile file("../data.xml");

if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();

xmlWriter.writeStartElement("Senders");
xmlWriter.writeStartElement("Sender");

xmlWriter.writeTextElement("Name", "COMPANY XYZ");
xmlWriter.writeTextElement("Street", "Random");
xmlWriter.writeTextElement("BuildingNumber", "23D");
xmlWriter.writeTextElement("LocalNumber", "123");
xmlWriter.writeTextElement("CityCode", "3434-21");
xmlWriter.writeTextElement("City", "New York");

xmlWriter.writeEndElement();
xmlWriter.writeEndElement();

file.close();
}

QVector<QString> data;

if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QXmlStreamReader xmlReader(&file);

while (!xmlReader.atEnd() && !xmlReader.hasError())
{
xmlReader.readNext();
if (xmlReader.isStartElement())
{
qDebug() << "element name: '" << xmlReader.name().toString() << "'"
<< ", text: '" << xmlReader.text().toString() << "'" << endl;
}
}
file.close();
}

return a.exec();
}

那么我在读取文件时做错了什么?

我得到的输出:

element name: ' "Senders" ' , text: ' "" ' 

element name: ' "Sender" ' , text: ' "" '

element name: ' "Name" ' , text: ' "" '

element name: ' "Street" ' , text: ' "" '

element name: ' "BuildingNumber" ' , text: ' "" '

element name: ' "LocalNumber" ' , text: ' "" '

element name: ' "CityCode" ' , text: ' "" '

element name: ' "City" ' , text: ' "" '

最佳答案

当您位于StartElement 标记处时,您只能获取该元素的名称,而不能获取它的值。您需要进一步阅读并找到 Characters 标记才能读取元素的值。您还想跳过纯空白标记:

while (!xmlReader.atEnd() && !xmlReader.hasError())
{
xmlReader.readNext();
//here we are at StartElement, so we can read the element's name
if (xmlReader.isStartElement())
{
qDebug() << "element name: '" << xmlReader.name().toString() << "'";
}
//here we are inside the element, so if it is not empty, we can read the element's value
else if(xmlReader.isCharacters() && !xmlReader.isWhitespace())
{
qDebug() << "element value: '" <<xmlReader.text().toString() << "'";
}
}

关于c++ - QXmlStreamReader读取空文本,文档肯定不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com