QDebug operator <<(QDebug out, const QXmlStreamAttribute &a) { out << "QXmlStreamAttribute(" << "prefix:" << a.prefix().toString() << "namespaceuri:" << a.namespaceUri().toString() << "name:" << a.name().toString() << " value:" << a.value().toString() << ")"; return out; }
static PyObject *meth_QXmlStreamAttribute_namespaceUri(PyObject *sipSelf, PyObject *sipArgs) { PyObject *sipParseErr = NULL; { QXmlStreamAttribute *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QXmlStreamAttribute, &sipCpp)) { QStringRef *sipRes; Py_BEGIN_ALLOW_THREADS sipRes = new QStringRef(sipCpp->namespaceUri()); Py_END_ALLOW_THREADS return sipConvertFromNewType(sipRes,sipType_QStringRef,NULL); } }
_class * readFromXML(QString fileXml) { _class *root = NULL; // init xml stream QFile file(fileXml); QXmlStreamReader xmlReader; //QString line; if ( !file.open(QIODevice::ReadOnly) ) return false; { QTextStream t( &file ); // stream.setCodec("CP-866"); xmlReader.addData(t.readAll()); } // start reading QStack<_specXMLElement *> stackElements; while(!xmlReader.atEnd()) { if(xmlReader.isCharacters() && stackElements.count() != 0) { _specXMLElement *pElemTop = stackElements.top(); if(pElemTop->hasBody()) pElemTop->setBody(xmlReader.readElementText()); } if(xmlReader.isStartElement()) { QString strName = xmlReader.name().toString(); _specXMLElement *elem = createElement(strName); _specXMLElement *parentElem = (stackElements.count() != 0) ? stackElements.top() : NULL; if(stackElements.count() == 0) root = (_class *)elem; if(parentElem != NULL) parentElem->addChildElement(strName,elem); stackElements.push(elem); for(int i = 0; i < xmlReader.attributes().count(); i++) { QXmlStreamAttribute attr = xmlReader.attributes().at(i); elem->setAttribute(attr.name().toString(), attr.value().toString()); } } if(xmlReader.isEndElement()) { stackElements.pop(); } xmlReader.readNext(); }; if(xmlReader.hasError()) { return NULL; // std::cout << xmlReader.errorString().toStdString(); } return root; };
bool applyTranslationToXMIFile(const char *fileName, const QStringList &attributes, TranslationMap &translations) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) return false; QXmlStreamReader reader(&file); QFile outFile; if (!outFile.open(stdout, QIODevice::WriteOnly)) return false; QXmlStreamWriter writer(&outFile); writer.setAutoFormatting (true); writer.setAutoFormattingIndent(1); writer.setCodec(reader.documentEncoding().toLatin1().constData()); while (!reader.atEnd()) { QXmlStreamReader::TokenType type = reader.readNext(); switch(type) { case QXmlStreamReader::ProcessingInstruction: writer.writeProcessingInstruction(reader.processingInstructionTarget().toString(), reader.processingInstructionData().toString()); break; case QXmlStreamReader::DTD: writer.writeDTD(reader.text().toString()); break; case QXmlStreamReader::StartDocument: writer.writeStartDocument(reader.documentVersion().toString()); break; case QXmlStreamReader::StartElement: { writer.writeStartElement(reader.namespaceUri().toString(), reader.name().toString()); if (reader.namespaceDeclarations().size() > 0) { QXmlStreamNamespaceDeclaration ns = reader.namespaceDeclarations().first(); writer.writeNamespace(ns.namespaceUri().toString(), ns.prefix().toString()); } QXmlStreamAttributes writerAttributes; for(int index = 0; index < reader.attributes().size(); index++) { QXmlStreamAttribute attr = reader.attributes()[index]; QString name = attr.qualifiedName().toString(); if (!attributes.contains(name)) { writerAttributes.append(attr); continue; } QString value = attr.value().toString(); if (value.isEmpty()) { writerAttributes.append(attr); continue; } if (!translations.contains(value)) { cerr << "could not find translation for attribute '" << qPrintable(name) << "':'" << qPrintable(value) << "'" << std::endl; continue; } QString newValue = translations[value]; if (newValue.isEmpty()) { writerAttributes.append(attr); continue; } //cerr << name.toUtf8().data() << ":" << value.toUtf8().data() << "->" << newValue.toUtf8().data() << endl; QXmlStreamAttribute newAttribute(name, newValue); writerAttributes.append(newAttribute); //qDebug() << writerAttributes; } writer.writeAttributes(writerAttributes); //QString content = xmlReader.readElementText(QXmlStreamReader::SkipChildElements); //writer.writeCharacters(content); break; } case QXmlStreamReader::Characters: writer.writeCharacters(reader.text().toString()); break; case QXmlStreamReader::Comment: writer.writeComment(reader.text().toString()); break; case QXmlStreamReader::EndElement: writer.writeEndElement(); break; case QXmlStreamReader::EndDocument: writer.writeEndDocument(); break; default: break; } } outFile.close(); return true; }
QDebug operator<<(QDebug dbg, const QXmlStreamAttribute &a) { dbg.nospace() << a.namespaceUri().toString() << ":" << a.name().toString() << " = " << a.value().toString(); return dbg.space(); }/**/