- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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() << "'";
}
}
关于c++ - QXmlStreamReader读取空文本,文档肯定不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629694/
这是 xml 文件: alpha beta beta gamma gamma delta delta epsilon epsilon golf 这是我的读者: QXmlStreamReader in
我有一个 QXmlStreamReader 变量,我希望它遍历我的 xml 文件 - QFile,并通过函数 readNextStartElement() 读取所有开始元素。但它给了我每个开始标记两次
我正在尝试使用 QXmlStreamReader 读取 XML 文档。当我尝试将指向读者的指针传递给其他类时,我遇到了问题。我在一个类中创建了一个阅读器实例。该类读取 XML,直到它到达定义新类的 b
我在使用 Qt QXmlStreamReader (Qt 4.8.1) 检测空元素时遇到了一些问题。有一个 XML 文件包含以下部分 4,5,6,7,8,9,10,11 tru
在我的系统上,一段适用于 Python 2 的代码不适用于 Python 3。 f = open("plotwidget.svg") svgData = f.read() xml_stream = Q
我正在使用 Qt 5.11.1(MSVSC2015 32 位)和 QtCreator 4.6.2。我在使用 QXmlStreamReader 解析 XML 时遇到问题。代码是根据Qt's exampl
我用 QXmlStreamWriter 创建了这个 xml 文件: Bayer Lever
我正在尝试从网站解析一些值。为此,我使用了 QXmlStreamReader。开始解析后,我收到 XML 错误:“应为 '=',但得到的是 '>'。”。它打破了这个格式错误的元素: 我想这是因为标准
我必须实现一个 xml 解析器,它在运行时构造 Qt 对象并将其放置在小部件中。我写了一个基于 this 的解析器.一个模块代表 QWidget,它将包含 QPushButton 和 QCheckBo
你好,问题是我正在使用 QXmlStreamReader 读取 XML 文件以读取日历的约会,但是当我从 AppointmentSolo 切换到 AppointmentRepeat atEnd( )
我有 XML 格式为 8.0 我正在使用 QXmlStreamReader解析 XML。我能够读取标签“值”和实际值“8.0”,但无法读取 XML 的 active="false"> 部分。
我想用QXmlStreamReader读取一个XML文件,但是我实在不知道问题出在哪里。我的函数读取第一个标签的内容,但随后停止。 XML文件的格式: mina
我正在做我正在使用的东西 QXMLStreamReader和 QXMLStreamWriter , 读取和写入文件。 但是我无法找到一种方法来修改 XML,例如考虑这个 XML:
我正在尝试使用 QXmlStreamReader 解析 XML 文件。使用以下代码,我只能从示例 xml 文件中获取第一个测试用例。 from PyQt4.QtCore import QXmlStre
因此,我正在尝试阅读一个中等大小的 XML 文档。它的结构如下: Joe Smith Rick Jones projects/internal/project2 1.
因此,我正在尝试阅读一个中等大小的 XML 文档。它的结构如下: Joe Smith Rick Jones projects/internal/project2 1.
使用 QXmlStreamReader , 我想要使用 HTML 标签的富文本格式的 XML 文件。例如,在此文件中,如果能够访问 会很好和其他用于格式化文本的 HTML 标记。 (使用 Qt,我可
用Qt的QXmlStreamReader读取Xml数据时: readNext() 应该放在 while(!reader.atEnd()) 循环的开头还是结尾?我遇到过很多把它放在开头的例子,但也有很多
我要解析的 XML 是这样的: 1234 /foo/bar 现在,我需要为 post 的每个 child 插入,它的标签名称和内容在一个 QVariantM
我正在尝试使用 QXmlStreamReader (Qt 5.5.1) 在 C++ 中解析 xml 文件。我正在使用 XML 文件将数字键映射到相应的图像文件。我已经让它与一个简单的 XML 文件一起
我是一名优秀的程序员,十分优秀!