📄 xmlwriter.java
字号:
* <p>This method is invoked automatically by the * {@link #endDocument endDocument} method after writing a * document.</p> * * @see #reset */ public void flush () throws IOException { output.flush(); } /** * Set a new output destination for the document. * * @param writer The output destination, or null to use * standard output. * @return The current output writer. * @see #flush */ public void setOutput (Writer writer) { if (writer == null) { output = new OutputStreamWriter(System.out); } else { output = writer; } } /** * Specify a preferred prefix for a Namespace URI. * * <p>Note that this method does not actually force the Namespace * to be declared; to do that, use the {@link * #forceNSDecl(java.lang.String) forceNSDecl} method as well.</p> * * @param uri The Namespace URI. * @param prefix The preferred prefix, or "" to select * the default Namespace. * @see #getPrefix * @see #forceNSDecl(java.lang.String) * @see #forceNSDecl(java.lang.String,java.lang.String) */ public void setPrefix (String uri, String prefix) { prefixTable.put(uri, prefix); } /** * Get the current or preferred prefix for a Namespace URI. * * @param uri The Namespace URI. * @return The preferred prefix, or "" for the default Namespace. * @see #setPrefix */ public String getPrefix (String uri) { return (String)prefixTable.get(uri); } /** * Force a Namespace to be declared on the root element. * * <p>By default, the XMLWriter will declare only the Namespaces * needed for an element; as a result, a Namespace may be * declared many places in a document if it is not used on the * root element.</p> * * <p>This method forces a Namespace to be declared on the root * element even if it is not used there, and reduces the number * of xmlns attributes in the document.</p> * * @param uri The Namespace URI to declare. * @see #forceNSDecl(java.lang.String,java.lang.String) * @see #setPrefix */ public void forceNSDecl (String uri) { forcedDeclTable.put(uri, Boolean.TRUE); } /** * Force a Namespace declaration with a preferred prefix. * * <p>This is a convenience method that invokes {@link * #setPrefix setPrefix} then {@link #forceNSDecl(java.lang.String) * forceNSDecl}.</p> * * @param uri The Namespace URI to declare on the root element. * @param prefix The preferred prefix for the Namespace, or "" * for the default Namespace. * @see #setPrefix * @see #forceNSDecl(java.lang.String) */ public void forceNSDecl (String uri, String prefix) { setPrefix(uri, prefix); forceNSDecl(uri); } //////////////////////////////////////////////////////////////////// // Methods from org.xml.sax.ContentHandler. //////////////////////////////////////////////////////////////////// /** * Write the XML declaration at the beginning of the document. * * Pass the event on down the filter chain for further processing. * * @exception org.xml.sax.SAXException If there is an error * writing the XML declaration, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#startDocument */ public void startDocument () throws SAXException { reset(); //write("<?xml version=\"1.0\" standalone=\"yes\"?>\n\n"); write("<?xml version=\"1.0\"?>\n\n"); super.startDocument(); } /** * Write a newline at the end of the document. * * Pass the event on down the filter chain for further processing. * * @exception org.xml.sax.SAXException If there is an error * writing the newline, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#endDocument */ public void endDocument () throws SAXException { closeElement(); write('\n'); super.endDocument(); try { flush(); } catch (IOException e) { throw new SAXException(e); } } /** * Write a start tag. * * Pass the event on down the filter chain for further processing. * * @param uri The Namespace URI, or the empty string if none * is available. * @param localName The element's local (unprefixed) name (required). * @param qName The element's qualified (prefixed) name, or the * empty string is none is available. This method will * use the qName as a template for generating a prefix * if necessary, but it is not guaranteed to use the * same qName. * @param atts The element's attribute list (must not be null). * @exception org.xml.sax.SAXException If there is an error * writing the start tag, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#startElement */ public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException { closeElement(); elementLevel++; nsSupport.pushContext(); write('<'); writeName(uri, localName, qName, true); writeAttributes(atts); if (elementLevel == 1) { forceNSDecls(); } writeNSDecls(); openElement = true; super.startElement(uri, localName, qName, atts); } /** * Write an end tag. * * Pass the event on down the filter chain for further processing. * * @param uri The Namespace URI, or the empty string if none * is available. * @param localName The element's local (unprefixed) name (required). * @param qName The element's qualified (prefixed) name, or the * empty string is none is available. This method will * use the qName as a template for generating a prefix * if necessary, but it is not guaranteed to use the * same qName. * @exception org.xml.sax.SAXException If there is an error * writing the end tag, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#endElement */ public void endElement (String uri, String localName, String qName) throws SAXException { if (openElement) { write("/>"); openElement = false; } else { write("</"); writeName(uri, localName, qName, true); write('>'); } if (elementLevel == 1) { write('\n'); } super.endElement(uri, localName, qName); nsSupport.popContext(); elementLevel--; } /** * Write character data. * * Pass the event on down the filter chain for further processing. * * @param ch The array of characters to write. * @param start The starting position in the array. * @param length The number of characters to write. * @exception org.xml.sax.SAXException If there is an error * writing the characters, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#characters */ public void characters (char ch[], int start, int len) throws SAXException { closeElement(); writeEsc(ch, start, len, false); super.characters(ch, start, len); } /** * Write ignorable whitespace. * * Pass the event on down the filter chain for further processing. * * @param ch The array of characters to write. * @param start The starting position in the array. * @param length The number of characters to write. * @exception org.xml.sax.SAXException If there is an error * writing the whitespace, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#ignorableWhitespace */ public void ignorableWhitespace (char ch[], int start, int length) throws SAXException { closeElement(); writeEsc(ch, start, length, false); super.ignorableWhitespace(ch, start, length); } /** * Write a processing instruction. * * Pass the event on down the filter chain for further processing. * * @param target The PI target. * @param data The PI data. * @exception org.xml.sax.SAXException If there is an error * writing the PI, or if a handler further down * the filter chain raises an exception. * @see org.xml.sax.ContentHandler#processingInstruction */ public void processingInstruction (String target, String data) throws SAXException { closeElement(); write("<?"); write(target); write(' '); write(data); write("?>"); if (elementLevel < 1) { write('\n'); } super.processingInstruction(target, data); } //////////////////////////////////////////////////////////////////// // Methods from org.xml.sax.ext.LexicalHandler. //////////////////////////////////////////////////////////////////// /** * Write start of DOCTYPE declaration. * * Pass the event on down the filter chain for further processing. * * @param name The document type name. * @param publicId The declared public identifier for the * external DTD subset, or null if none was declared. * @param systemId The declared system identifier for the * external DTD subset, or null if none was declared. * @exception org.xml.sax.SAXException If a filter * further down the chain raises an exception. * @see org.xml.sax.ext.LexicalHandler#startDTD */ public void startDTD(String name, String publicId, String systemId) throws SAXException { //closeElement(); inDTD = true; write("<!DOCTYPE "); write(name); boolean hasPublic = publicId != null && !publicId.equals(""); if (hasPublic) { write(" PUBLIC \""); write(publicId); write('\"'); } if (systemId != null && !systemId.equals("")) { if (!hasPublic) { write(" SYSTEM"); } write(" \""); write(systemId); write('\"'); } write(">\n\n"); super.startDTD(name, publicId, systemId); } /** * Write end of DOCTYPE declaration. * * Pass the event on down the filter chain for further processing. * * @exception org.xml.sax.SAXException If a filter * further down the chain raises an exception. * @see org.xml.sax.ext.LexicalHandler#endDTD */ public void endDTD() throws SAXException { inDTD = false; super.endDTD(); } /* * Write entity. * * Pass the event on down the filter chain for further processing. * * @param name The name of the entity. If it is a parameter * entity, the name will begin with '%', and if it is the * external DTD subset, it will be "[dtd]". * @exception org.xml.sax.SAXException If a filter * further down the chain raises an exception. * @see org.xml.sax.ext.LexicalHandler#startEntity */ public void startEntity(String name) throws SAXException { closeElement(); write('&'); write(name); write(';'); super.startEntity(name); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -