QXmlStreamReader读取空文本,文档肯定不是空的
QXmlStreamReader reads empty text, document is for sure not empty
我在应用程序中使用QXmlStreamReader
和QXmlStreamWriter
读取和写入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() << "'";
}
}
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- mbed:使用 USB 文档库编译会导致错误
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- 使用 yaml-cpp 更新 YAML 文档的节点和值
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 如何在C++中表示JSON文档的递归对象结构?
- 如何查找 Redshift Maya API 文档?
- 读取,操纵和写入C 文档,主要使用FSTREAM和数组
- 如何使用 c++ 中的文件读取和写入文档、pdf 文件
- Windows 8:如何以编程方式读取用户文档文件夹路径(使用 c)
- rapidjson:用于从文件中读取文档的工作代码
- QXmlStreamReader读取空文本,文档肯定不是空的
- 读取文件夹中的所有文件,然后将每个文件及其匹配项放入新的excel文档中.是否可以用c++
- POCO C++SAX解析器:如果xml文档编码是ANSI,那么下一条语句不是读取并抛出编码错误异常
- 使用QXmlStreamReader读取XML文档中的嵌入式HTML