QString QXmlStreamReader::InnerXml() { QString ret; QXmlStreamWriter sw(&ret); sw.setAutoFormatting(false); _read_inner_xml(sw); return ret; } QString QXmlStreamReader::InnerText() { QString ret = ""; QXmlStreamWriter sw(&ret); sw.setAutoFormatting(false); if(tokenType() == GXmlStreamReader::StartElement) { int t; while((t = readNext()) != GXmlStreamReader::EndElement && t != GXmlStreamReader::EndDocument && t != GXmlStreamReader::Invalid) { _read_inner_xml(sw); } } return ret; } // private method that actually builds the inner xml: void QXmlStreamReader::_read_inner_xml(QXmlStreamWriter &sw) { if(tokenType() == GXmlStreamReader::StartElement) { // copy the start tag sw.writeStartElement(name().toString()); // copy all the attributes foreach(QXmlStreamAttribute a, attributes()) { sw.writeAttribute(a.name().toString(), a.value().toString()); } // Copy children recursively (maybe make this a behavior flag?) // Maybe the user can specify the depth of the traversal? int t; while((t = readNext()) != GXmlStreamReader::EndElement && t != GXmlStreamReader::EndDocument && t != GXmlStreamReader::Invalid) { if(t == GXmlStreamReader::Characters) sw.writeCharacters(text().toString()); else _read_inner_xml(sw); } // Close the element sw.writeEndElement(); } }