Qt---Xml文件解析 (2)

用QXmlStreamReader解析DTD也非常方便,方法与解析CDATA一样,只是换了个判断函数:

while (!m_xmlReader.isDTD()) { m_xmlReader.readNext(); } auto item = new QTreeWidgetItem(QStringList("[DTD]")); item->setText(1, m_xmlReader.text().toString()); item->setBackgroundColor(1, QColor(Qt::darkMagenta)); m_treeWidget.addTopLevelItem(item); 解析Xml 注释

Xml 的注释也与HTML相同,<!-- XXXXXXXXXXXXXXXXXXX -->,代码与上一小节基本一样,只是判断处改用了QXmlStreamReader::isComment()。

while (!m_xmlReader.isComment()) { m_xmlReader.readNext(); } ... 解析Xml Processing Instruction

XMl PI(Processing Instruction) 处理指令使用这种格式<?PITarget PIContent?>,前一部分是Target,后一部分是Content。Processing Instruction用来告诉Xml应用程序进行一些Xml以外的操作,例如在有一些应用中,Xml文件需要包含一些CSS文件用以应用样式来渲染自身:

<?xml-stylesheet type="text/css" href="http://www.likecs.com/tutorials.css"?>

在QXmlStreamReader中,好像紧贴<?的被识别位Target,后面的内容都被认为是Content:

while (!m_xmlReader.isProcessingInstruction()) { m_xmlReader.readNext(); } auto item = new QTreeWidgetItem(QStringList("[ProcessingInstruction]")); item->setText(1, "target: " + m_xmlReader.processingInstructionTarget().toString() + " content: " + m_xmlReader.processingInstructionData().toString()); item->setBackgroundColor(1, QColor(Qt::yellow)); m_treeWidget.addTopLevelItem(item);

获取PI相关内容需要分别调用QXmlStreamReader::processingInstructionTarget(),QXmlStreamReader::processingInstructionData()。

示例运行结果

因为Xml的元素是自定义的,这就意味着往往不同的Xml内部的元素结构都不一样,不同的约定格式需要编写不同的逻辑代码处理。这个示例我们用QTreeWidget来展示解析出来的结构和内容:

result-link

完整代码见链接。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyffj.html