public static void xmlStreamReader2XmlText(XMLStreamReader xsr,
OutputStream os) throws XMLStreamException {
//REVIEW (zieg): I think we can cache this factory
XMLStreamWriter xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(os);
while (xsr.hasNext())
{
switch( xsr.getEventType() )
{
case XMLStreamReader.ATTRIBUTE:
xsw.writeAttribute(xsr.getPrefix(), xsr.getNamespaceURI(), xsr.getLocalName(), xsr.getText());
break;
case XMLStreamReader.CDATA:
xsw.writeCData(xsr.getText());
break;
case XMLStreamReader.CHARACTERS:
xsw.writeCharacters(xsr.getText());
break;
case XMLStreamReader.COMMENT:
xsw.writeComment(xsr.getText());
break;
case XMLStreamReader.DTD:
xsw.writeDTD(xsr.getText());
break;
case XMLStreamReader.END_DOCUMENT:
xsw.writeEndDocument();
break;
case XMLStreamReader.END_ELEMENT:
xsw.writeEndElement();
break;
case XMLStreamReader.ENTITY_DECLARATION:
break;
case XMLStreamReader.ENTITY_REFERENCE:
xsw.writeEntityRef(xsr.getText());
break;
case XMLStreamReader.NAMESPACE:
xsw.writeNamespace(xsr.getPrefix(), xsr.getNamespaceURI());
break;
case XMLStreamReader.NOTATION_DECLARATION:
break;
case XMLStreamReader.PROCESSING_INSTRUCTION:
xsw.writeProcessingInstruction(xsr.getPITarget(), xsr.getPIData());
break;
case XMLStreamReader.SPACE:
xsw.writeCharacters(xsr.getText());
break;
case XMLStreamReader.START_DOCUMENT:
xsw.writeStartDocument();
break;
case XMLStreamReader.START_ELEMENT:
xsw.writeStartElement(xsr.getPrefix()==null ? "" : xsr.getPrefix(), xsr.getLocalName(), xsr.getNamespaceURI());
int attrs = xsr.getAttributeCount();
for ( int i = attrs-1; i >=0; i--)
{
xsw.writeAttribute(xsr.getAttributePrefix(i)==null ? "" : xsr.getAttributePrefix(i), xsr.getAttributeNamespace(i), xsr.getAttributeLocalName(i), xsr.getAttributeValue(i));
}
int nses = xsr.getNamespaceCount();
for ( int i = 0; i< nses; i++)
{
xsw.writeNamespace(xsr.getNamespacePrefix(i), xsr.getNamespaceURI(i));
}
break;
}
xsr.next();
}
xsw.flush();
}
|