xmleventwriterimpl.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 225 行

JAVA
225
字号
/** Copyright (c) 1998-2008 Caucho Technology -- all rights reserved** This file is part of Resin(R) Open Source** Each copy or derived work must preserve the copyright notice and this* notice unmodified.** Resin Open Source is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** Resin Open Source is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty* of NON-INFRINGEMENT.  See the GNU General Public License for more* details.** You should have received a copy of the GNU General Public License* along with Resin Open Source; if not, write to the**   Free Software Foundation, Inc.*   59 Temple Place, Suite 330*   Boston, MA 02111-1307  USA** @author Emil Ong*/package com.caucho.xml.stream;import javax.xml.namespace.NamespaceContext;import javax.xml.namespace.QName;import javax.xml.stream.XMLEventReader;import javax.xml.stream.XMLEventWriter;import static javax.xml.stream.XMLStreamConstants.*;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamWriter;import javax.xml.stream.events.*;import java.util.Iterator;public class XMLEventWriterImpl implements XMLEventWriter {  private XMLStreamWriter _out;  public XMLEventWriterImpl(XMLStreamWriter out)  {    _out = out;  }  public XMLStreamWriter getXMLStreamWriter()  {    return _out;  }  public void add(XMLEvent event) throws XMLStreamException  {    // Order important: Namespace extends Attribute, so it comes first    if (event instanceof Namespace) {      Namespace namespace = (Namespace) event;            if (namespace.isDefaultNamespaceDeclaration())        _out.writeDefaultNamespace(namespace.getNamespaceURI());      else        _out.writeNamespace(namespace.getPrefix(),                             namespace.getNamespaceURI());    }    else if (event instanceof Attribute) {      Attribute attribute = (Attribute) event;      QName name = attribute.getName();      if (name.getPrefix() != null && ! "".equals(name.getPrefix())) {        _out.writeAttribute(name.getPrefix(), name.getNamespaceURI(),                            name.getLocalPart(), attribute.getValue());      }      else if (name.getNamespaceURI() != null &&                ! "".equals(name.getNamespaceURI())) {        _out.writeAttribute(name.getNamespaceURI(), name.getLocalPart(),                             attribute.getValue());      }      else        _out.writeAttribute(name.getLocalPart(), attribute.getValue());    }     else if (event instanceof Characters) {      Characters characters = (Characters) event;      switch (characters.getEventType()) {        case CDATA:          _out.writeCData(characters.getData());          break;        case SPACE:        case CHARACTERS:         default:          _out.writeCharacters(characters.getData());          break;      }    }     else if (event instanceof Comment) {      Comment comment = (Comment) event;      _out.writeComment(comment.getText());    }     else if (event instanceof DTD) {      DTD dtd = (DTD) event;      _out.writeDTD(dtd.getDocumentTypeDeclaration());    }     else if (event instanceof EndDocument) {      _out.writeEndDocument();    }     else if (event instanceof EndElement) {      _out.writeEndElement();    }     else if (event instanceof EntityDeclaration) {      throw new UnsupportedOperationException();    }     else if (event instanceof EntityReference) {      throw new UnsupportedOperationException();    }     else if (event instanceof NotationDeclaration) {      throw new UnsupportedOperationException();    }     else if (event instanceof ProcessingInstruction) {      ProcessingInstruction pi = (ProcessingInstruction) event;      if (pi.getData() == null || "".equals(pi.getData()))        _out.writeProcessingInstruction(pi.getTarget());      else        _out.writeProcessingInstruction(pi.getTarget(), pi.getData());    }    else if (event instanceof StartDocument) {      StartDocument startDocument = (StartDocument) event;      if (startDocument.encodingSet()) {        _out.writeStartDocument(startDocument.getCharacterEncodingScheme(),                                startDocument.getVersion());      }      else if (startDocument.getVersion() != null &&               ! "".equals(startDocument.getVersion())) {        _out.writeStartDocument(startDocument.getVersion());      }      else        _out.writeStartDocument();    }    else if (event instanceof StartElement) {      StartElement startElement = (StartElement) event;      QName name = startElement.getName();      // Namespaces      // We do namespaces first because the element itself may need one      // xml/300w should catch this      Iterator namespaces = startElement.getNamespaces();      while (namespaces.hasNext())        add((Namespace) namespaces.next());      if (name.getPrefix() != null && ! "".equals(name.getPrefix())) {        _out.writeStartElement(name.getPrefix(),                                name.getLocalPart(),                               name.getNamespaceURI());      }      else if (name.getNamespaceURI() != null &&                ! "".equals(name.getNamespaceURI())) {        _out.writeStartElement(name.getNamespaceURI(), name.getLocalPart());      }      else         _out.writeStartElement(name.getLocalPart());      // Attributes      Iterator attributes = startElement.getAttributes();      while (attributes.hasNext())        add((Attribute) attributes.next());    }    else      throw new XMLStreamException();  }  public void add(XMLEventReader reader) throws XMLStreamException  {    while (reader.hasNext())      add(reader.nextEvent());  }  public void close() throws XMLStreamException  {    _out.close();  }  public void flush() throws XMLStreamException  {    _out.flush();  }  public NamespaceContext getNamespaceContext()  {    return _out.getNamespaceContext();  }  public String getPrefix(String uri) throws XMLStreamException  {    return _out.getPrefix(uri);  }  public void setDefaultNamespace(String uri) throws XMLStreamException  {    _out.setDefaultNamespace(uri);  }  public void setNamespaceContext(NamespaceContext context)    throws XMLStreamException  {    _out.setNamespaceContext(context);  }  public void setPrefix(String prefix, String uri) throws XMLStreamException  {    _out.setPrefix(prefix, uri);  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?