QXmlStreamReader读写xml格式字符串遇到的问题解决方案

本文介绍如何使用QXmlStreamReader从非标准XML格式字符串中提取标记名,通过添加根节点解决读取问题,实现对所有标记的有效读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:
希望用QXmlStreamReader来读取xml格式字符串中所有的标记名字,如:“<title>这个是一个标题</title><ss>三生三世十里桃花</ss>”里面的返回title,ss标记。

	QString data = "<title>这个是一个标题</title><ss>三生三世十里桃花</ss>";

	QXmlStreamReader reader(data);
	QStringList lstPrintData;
	while(!reader.atEnd())
	{
		reader.readNext();
		QXmlStreamReader::TokenType type = reader.tokenType();
		qDebug()<<"type = "<<type;
		if( type == QXmlStreamReader::StartElement )
		{
			QString nameStr = reader.name().toString();
			lstPrintData.append(nameStr);
		}
	}

返回lstPrintData中只包含 title;为了探究清楚,打印了信息会显示读到后将显示type值QXmlStreamReader::Invalid,这个是个报错An error has occurred, reported in error() and errorString().
查了相关资料,说这个字符串不是标准的xml格式,标准中只能有一个根节点。

XML文档有且只有一个根元素
良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。

于是,改进xml字符串,如下:

	data = "<title>这个是一个标题</title><ss>三生三世十里桃花</ss>";
	QString strlog = "<root>" + data + "</root>";
	QXmlStreamReader reader(strlog);
	QStringList lstPrintData;
	while(!reader.atEnd())
	{
		reader.readNext();
		QXmlStreamReader::TokenType type = reader.tokenType();
		qDebug()<<"type = "<<type;
		if( type == QXmlStreamReader::StartElement )
		{
			QString nameStr = reader.name().toString();
			if(nameStr!="root")
				lstPrintData.append(nameStr);
		}
	}

返回包含除root外所有标记名称,即title,ss。
此时得到需要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼儿LY

一切随缘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值