while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
switch (event.getEventType()) {
case XMLEvent.ATTRIBUTE: {
Attribute attr = (Attribute) event;
QName name = attr.getName();
writer.writeAttribute(name.getPrefix(), name.getNamespaceURI(),
name.getLocalPart(), attr.getValue());
break;
}
case XMLEvent.START_DOCUMENT:
case XMLEvent.END_DOCUMENT:
//not doing this as we're in a partial write mode
break;
case XMLEvent.END_ELEMENT:
writer.writeEndElement();
break;
case XMLEvent.NAMESPACE: {
Namespace ns = (Namespace) event;
writer.writeNamespace(ns.getPrefix(), ns.getNamespaceURI());
break;
}
case XMLEvent.START_ELEMENT: {
StartElement se = event.asStartElement();
QName n = se.getName();
writer.writeStartElement(n.getPrefix(), n.getLocalPart(),
n.getNamespaceURI());
Iterator<?> it = se.getNamespaces();
while (it.hasNext()) {
Namespace ns = (Namespace) it.next();
writer.writeNamespace(ns.getPrefix(), ns.getNamespaceURI());
}
it = se.getAttributes();
while (it.hasNext()) {
Attribute attr = (Attribute) it.next();
QName name = attr.getName();
writer.writeAttribute(name.getPrefix(), name.getNamespaceURI(),
name.getLocalPart(), attr.getValue());
}
break;
}
case XMLEvent.CHARACTERS: {