/*! \internal */ void QXmlSerializer::item(const QPatternist::Item &outputItem) { Q_D(QXmlSerializer); if(outputItem.isAtomicValue()) { if(d->isPreviousAtomic) { startContent(); d->write(' '); writeEscaped(outputItem.stringValue()); } else { d->isPreviousAtomic = true; const QString value(outputItem.stringValue()); if(!value.isEmpty()) { startContent(); writeEscaped(value); } } } else { startContent(); Q_ASSERT(outputItem.isNode()); sendAsNode(outputItem); } }
/*! \internal Treats \a outputItem as a node and calls the appropriate function, e.g., attribute() or comment(), depending on its QXmlNodeModelIndex::NodeKind. This is a helper function that subclasses can use to multiplex Nodes received via item(). */ void QAbstractXmlReceiver::sendAsNode(const QPatternist::Item &outputItem) { Q_ASSERT(outputItem); Q_ASSERT(outputItem.isNode()); const QXmlNodeModelIndex asNode = outputItem.asNode(); switch(asNode.kind()) { case QXmlNodeModelIndex::Attribute: { const QString &v = outputItem.stringValue(); attribute(asNode.name(), QStringRef(&v)); return; } case QXmlNodeModelIndex::Element: { startElement(asNode.name()); /* First the namespaces, then attributes, then the children. */ asNode.sendNamespaces(this); sendFromAxis<QXmlNodeModelIndex::AxisAttribute>(asNode); sendFromAxis<QXmlNodeModelIndex::AxisChild>(asNode); endElement(); return; } case QXmlNodeModelIndex::Text: { const QString &v = asNode.stringValue(); characters(QStringRef(&v)); return; } case QXmlNodeModelIndex::ProcessingInstruction: { processingInstruction(asNode.name(), outputItem.stringValue()); return; } case QXmlNodeModelIndex::Comment: { comment(outputItem.stringValue()); return; } case QXmlNodeModelIndex::Document: { startDocument(); sendFromAxis<QXmlNodeModelIndex::AxisChild>(asNode); endDocument(); return; } case QXmlNodeModelIndex::Namespace: Q_ASSERT_X(false, Q_FUNC_INFO, "Not implemented"); } Q_ASSERT_X(false, Q_FUNC_INFO, QString::fromLatin1("Unknown node type: %1").arg(asNode.kind()).toUtf8().constData()); }
/*! \internal */ void QXmlFormatter::item(const QPatternist::Item &item) { Q_D(QXmlFormatter); if(item.isAtomicValue()) { if(QPatternist::XPathHelper::isWhitespaceOnly(item.stringValue())) return; else { d->canIndent.top() = false; startFormattingContent(); } } QXmlSerializer::item(item); }