参考:
http://blog.csdn.net/liang19890820/article/details/52808829
-
#ifndef QT_NO_XMLSTREAMREADER
-
class Q_CORE_EXPORT QXmlStreamReader {
-
QDOC_PROPERTY(bool namespaceProcessing READ namespaceProcessing WRITE setNamespaceProcessing)
-
public:
-
enum TokenType {
-
NoToken = 0,
-
Invalid,
-
StartDocument,
-
EndDocument,
-
StartElement,
-
EndElement,
-
Characters,
-
Comment,
-
DTD,
-
EntityReference,
-
ProcessingInstruction
-
};
该枚举指定 reader 刚刚读取的标记类型。
常量
|
值
|
描述
|
QXmlStreamReader::NoToken
|
0
|
reader 还没有读取任何东西
|
QXmlStreamReader::Invalid
|
1
|
发生错误,记录在 error() 和 errorString() 中
|
QXmlStreamReader::StartDocument
|
2
|
reader 记录了 XML 版本号(documentVersion()),以及 XML 文档中指定的编码(documentEncoding()),如果文档被声明为独立的,isStandaloneDocument() 返回 true;否则返回 false。
|
QXmlStreamReader::EndDocument
|
3
|
表示文档的结束
|
QXmlStreamReader::StartElement
|
4
|
表示一个拥有 namespaceUri() 和 name() 的元素开始。空元素也由 StartElement 表示,紧跟着 EndElement。可以调用便利函数 readElementText() 来来获取所有内容,直到遇到对应的 EndElement。属性在 attributes() 中声明,命名空间则在 namespaceDeclarations() 中声明。
|
QXmlStreamReader::EndElement
|
5
|
表示一个拥有 namespaceUri() 和 name() 的元素的结束
|
QXmlStreamReader::Characters
|
6
|
reader 由 text() 表示字符, 如果字符都是空格,isWhitespace() 返回true。如果字符来自 CDATA 部分,isCDATA() 返回 true。
|
QXmlStreamReader::Comment
|
7
|
reader 由 text() 表示注释
|
QXmlStreamReader::DTD
|
8
|
reader 由 text() 表示 DTD,notationDeclarations() 表示符号声明,entityDeclarations() 表示实体声明,DTD 声明的详细信息则由 dtdName()、dtdPublicId() 和 dtdSystemId() 表示。
|
QXmlStreamReader::EntityReference
|
9
|
reader 记录一个无法解析的实体引用,引用的名称由 name() 表示,替换文本为 text()。
|
QXmlStreamReader::ProcessingInstruction
|
10
|
reader 由 processingInstructionTarget() 和 processingInstructionData() 来表示处理指令
|
-
void parseBlog(QXmlStreamReader &reader) {
-
while (!reader.atEnd()) {
-
reader.readNext();
-
if (reader.isStartElement()) { // 开始元素
-
QString strElementName = reader.name().toString();
-
if (QString::compare(strElementName, "Blog") == 0) {
-
qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** ");
-
} else if (QString::compare(strElementName, QStringLiteral("作者")) == 0) { // 方式一
-
reader.readNext();
-
if (reader.isCharacters()) {
-
qDebug() << QStringLiteral("author:%1").arg(reader.text().toString());
-
}
-
} else if (QString::compare(strElementName, QStringLiteral("主页")) == 0) { // 方式二
-
qDebug() << QStringLiteral("mainPage:%1").arg(reader.readElementText());
-
} else if (QString::compare(strElementName, QStringLiteral("个人说明")) == 0) {
-
qDebug() << QStringLiteral("description:%1").arg(reader.readElementText());
-
}
-
} else if (reader.isEntityReference()) { // 实体引用
-
QString strName = reader.name().toString();
-
QString strText = reader.text().toString();
-
qDebug() << QString("EntityReference : %1(%2)").arg(strName).arg(strText);
-
} else if (reader.isCDATA()) { // CDATA
-
QString strCDATA = reader.text().toString();
-
qDebug() << QString("CDATA : %1").arg(strCDATA);
-
-
reader.readNext();
-
if (reader.isCharacters()) {
-
QString strCharacters = reader.text().toString();
-
qDebug() << QString("Characters: %1").arg(strCharacters);
-
}
-
} else if (reader.isEndElement()) { // 结束元素
-
QString strElementName = reader.name().toString();
-
if (QString::compare(strElementName, "Blogs") == 0) {
-
qDebug() << QString::fromLocal8Bit("********** end Blogs ********** ");
-
break; // 跳出循环(解析 QXmlStreamReader::EndDocument)
-
} else if (QString::compare(strElementName, "Blog") == 0) {
-
qDebug() << QString::fromLocal8Bit("********** end Blog ********** ");
-
}
-
}
-
}
-
}
-
-
int main(int argc, char *argv[])
-
{
-
QCoreApplication a(argc, argv);
-
-
QMap<QString,int> inputData;
-
inputData.insert("aaaa",12);
-
inputData.insert("bbbb",30);
-
//二进制文件操作
-
QFile testFile("test.dat");
-
if (!testFile.open(QIODevice::ReadWrite))
-
{
-
printf("error:open file fail");
-
return -1;
-
}
-
-
QDataStream fileInputStream(&testFile);
-
fileInputStream.setVersion(QDataStream::Qt_5_1);
-
fileInputStream<<inputData;
-
-
testFile.flush();
-
-
QDataStream fileReadStream(&testFile);
-
fileReadStream.setVersion(QDataStream::Qt_5_1);
-
QMap<QString,int> readData;
-
fileReadStream>>readData;
-
-
QMapIterator<QString, int> itr(readData);
-
while(itr.hasNext())
-
{
-
printf("key=%s\r\n",itr.next().key().toLatin1().data());
-
printf("data=%d\r\n",itr.next().value());
-
}
-
printf("write sucess!\r\n");
-
-
//文本文件操作
-
QFile txtFile("test.txt");
-
if (!txtFile.open(QIODevice::ReadOnly))
-
{
-
printf("error:open file\r\n");
-
return -1;
-
}
-
QString readLine;
-
QTextStream txtStream(&txtFile);
-
while (!txtStream.atEnd())
-
{
-
readLine = txtStream.readLine();
-
printf("line:%s\r\n",readLine.toLatin1().data());
-
}
-
printf("read end\r\n");
-
-
//解析xml文件
-
QFile xmlFile("test.xml");
-
if (!xmlFile.open(QIODevice::ReadOnly))
-
{
-
qDebug()<<"text.xml open fail"<<endl;
-
return -1;
-
}
-
QXmlStreamReader xmlReader(&xmlFile);
-
while (!xmlReader.atEnd())
-
{
-
QXmlStreamReader::TokenType tokenType = xmlReader.readNext();
-
-
switch(tokenType)
-
{
-
case (QXmlStreamReader::StartDocument): //开始的版本 编码 等信息
-
{
-
QString strVersion = xmlReader.documentVersion().toString();
-
QString strEncoding = xmlReader.documentEncoding().toString();
-
bool bAlone = xmlReader.isStandaloneDocument();
-
qDebug() << QString::fromLocal8Bit("version:%1 code:%2 Standalone:%3")
-
.arg(strVersion).arg(strEncoding).arg(bAlone) << "\r\n";
-
break;
-
}
-
case (QXmlStreamReader::Comment)://注释语句 <!>
-
{
-
QString strComment = xmlReader.text().toString();
-
qDebug() << strComment << "\r\n";
-
break;
-
}
-
case (QXmlStreamReader::StartElement): //数据开始符号
-
{
-
QString strElementName = xmlReader.name().toString();
-
if(QString::compare(strElementName,"Blogs") == 0)
-
{
-
QXmlStreamAttributes attributes = xmlReader.attributes();
-
if (attributes.hasAttribute("Version"))
-
{
-
QString strVersion = attributes.value("Version").toString();
-
qDebug() << QString::fromLocal8Bit("属性:Version(%1)").arg(strVersion);
-
}
-
parseBlog(xmlReader);
-
}
-
break;
-
}
-
default:
-
{
-
break;
-
}
-
}
-
}
-
return a.exec();
-
}
DOM方式写XML文件
http://laokaddk.blog.51cto.com/368606/599977/
阅读(1726) | 评论(0) | 转发(0) |