XML To FastInfoset Converter Example
#include <QtWidgets> #include <QXmlStreamReader> #include <DevMachines/QtitanBase> #include "mainwindow.h" #include "xmlsyntaxhighlighter.h" MainWindow::MainWindow() : DemoMainWindow("QtitanFastInfoset", QStringLiteral(QTN_VERSION_FASTINFOSET_STR), tr("FastInfoset/XML Converter")) { QWidget* panel = new QWidget(this); m_formUI.setupUi(panel); new XmlSyntaxHighlighter(m_formUI.xmlEdit->document()); connect(m_formUI.loadXML, SIGNAL(clicked()), this, SLOT(loadXML())); connect(m_formUI.loadFastInfoset, SIGNAL(clicked()), this, SLOT(loadFastInfoset())); connect(m_formUI.saveXML, SIGNAL(clicked()), this, SLOT(saveAsXML())); connect(m_formUI.saveFastInfoset, SIGNAL(clicked()), this, SLOT(saveAsFastInfoset())); setDemoWidget(panel, 0, Qt::AlignTop, false); } void xml_converter(IXmlStreamReader* reader, IXmlStreamWriter* writer) { while (reader->readNext() != QXmlStreamReader::Invalid) { switch (reader->tokenType()) { case QXmlStreamReader::NoToken: { Q_ASSERT(false); } break; case QXmlStreamReader::StartDocument: { QString version = reader->documentVersion().toString(); if (version.isEmpty()) version = "1.0"; if (reader->isStandaloneDocument()) writer->writeStartDocument(version, reader->isStandaloneDocument()); else writer->writeStartDocument(version); } break; case QXmlStreamReader::EndDocument: { writer->writeEndDocument(); } break; case QXmlStreamReader::StartElement: { QXmlStreamNamespaceDeclarations namespaceDeclarations = reader->namespaceDeclarations(); for (int i = 0; i < namespaceDeclarations.size(); ++i) { const QXmlStreamNamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(i); writer->writeNamespace(namespaceDeclaration.namespaceUri().toString(), namespaceDeclaration.prefix().toString()); } writer->writeStartElement(reader->namespaceUri().toString(), reader->name().toString()); writer->writeAttributes(reader->attributes()); } break; case QXmlStreamReader::EndElement: { writer->writeEndElement(); } break; case QXmlStreamReader::Characters: { if (reader->isCDATA()) { writer->writeCDATA(reader->text().toString()); } else { writer->writeCharacters(reader->text().toString()); } } break; case QXmlStreamReader::Comment: { writer->writeComment(reader->text().toString()); } break; case QXmlStreamReader::DTD: { writer->writeDTD(reader->dtdName().toString(), reader->dtdSystemId().toString(), reader->dtdPublicId().toString()); } break; case QXmlStreamReader::EntityReference: { } break; case QXmlStreamReader::ProcessingInstruction: { writer->writeProcessingInstruction(reader->processingInstructionTarget().toString(), reader->processingInstructionData().toString()); } break; default: break; } if (reader->atEnd()) break; } if (reader->hasError()) { QMessageBox::critical(qApp->activeWindow(), "Stream read error", reader->errorString()); return; } } void MainWindow::loadXML() { QString format = "XML (*.xml)"; QString fileName = QFileDialog::getOpenFileName(this, "Open XML File", QDir::currentPath(), format); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, "File open error", file.errorString()); return; } XmlStreamReader xmlreader(&file); QByteArray text; QBuffer buffer(&text); buffer.open(QIODevice::WriteOnly); XmlStreamWriter xmlwriter(&buffer); xml_converter(&xmlreader, &xmlwriter); buffer.close(); m_formUI.xmlEdit->setPlainText(text); } void MainWindow::loadFastInfoset() { QString format = "FastInfoset (*.fi)"; QString fileName = QFileDialog::getOpenFileName(this, "Open FastInfoset File", QDir::currentPath(), format); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, "File open error", file.errorString()); return; } FastInfosetStreamReader xmlreader(&file); QByteArray text; QBuffer buffer(&text); buffer.open(QIODevice::WriteOnly); XmlStreamWriter xmlwriter(&buffer); xml_converter(&xmlreader, &xmlwriter); buffer.close(); m_formUI.xmlEdit->setPlainText(text); } void MainWindow::saveAsXML() { QString format = "XML (*.xml)"; QString fileName = QFileDialog::getSaveFileName(this, "Save As XML File", QDir::currentPath(), format); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(this, "File open error", file.errorString()); return; } QByteArray text = m_formUI.xmlEdit->toPlainText().toUtf8(); QBuffer buffer(&text); buffer.open(QIODevice::ReadOnly); XmlStreamReader xmlreader(&buffer); XmlStreamWriter xmlwriter(&file); xml_converter(&xmlreader, &xmlwriter); buffer.close(); } void MainWindow::saveAsFastInfoset() { QString format = "FastInfoset (*.fi)"; QString fileName = QFileDialog::getSaveFileName(this, "Save As FastInfoset File", QDir::currentPath(), format); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(this, "File open error", file.errorString()); return; } QByteArray text = m_formUI.xmlEdit->toPlainText().toUtf8(); QBuffer buffer(&text); buffer.open(QIODevice::ReadOnly); XmlStreamReader xmlreader(&buffer); FastInfosetStreamWriter xmlwriter(&file); xml_converter(&xmlreader, &xmlwriter); buffer.close(); }