📄 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 + -