问题:
希望用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。
此时得到需要的结果。