📄 xmloutputter.java
字号:
out.write(currentFormat.lineSeparator); out.flush(); } /** * Print out the <code>{@link DocType}</code>. * * @param doctype <code>DocType</code> to output. * @param out <code>Writer</code> to use. */ public void output(DocType doctype, Writer out) throws IOException { printDocType(out, doctype); out.flush(); } /** * Print out an <code>{@link Element}</code>, including * its <code>{@link Attribute}</code>s, and all * contained (child) elements, etc. * * @param element <code>Element</code> to output. * @param out <code>Writer</code> to use. */ public void output(Element element, Writer out) throws IOException { // If this is the root element we could pre-initialize the // namespace stack with the namespaces printElement(out, element, 0, createNamespaceStack()); out.flush(); } /** * This will handle printing out an <code>{@link * Element}</code>'s content only, not including its tag, and * attributes. This can be useful for printing the content of an * element that contains HTML, like "<description>JDOM is * <b>fun>!</description>". * * @param element <code>Element</code> to output. * @param out <code>Writer</code> to use. */ public void outputElementContent(Element element, Writer out) throws IOException { List content = element.getContent(); printContentRange(out, content, 0, content.size(), 0, createNamespaceStack()); out.flush(); } /** * This will handle printing out a list of nodes. * This can be useful for printing the content of an element that * contains HTML, like "<description>JDOM is * <b>fun>!</description>". * * @param list <code>List</code> of nodes. * @param out <code>Writer</code> to use. */ public void output(List list, Writer out) throws IOException { printContentRange(out, list, 0, list.size(), 0, createNamespaceStack()); out.flush(); } /** * Print out a <code>{@link CDATA}</code> node. * * @param cdata <code>CDATA</code> to output. * @param out <code>Writer</code> to use. */ public void output(CDATA cdata, Writer out) throws IOException { printCDATA(out, cdata); out.flush(); } /** * Print out a <code>{@link Text}</code> node. Perfoms * the necessary entity escaping and whitespace stripping. * * @param text <code>Text</code> to output. * @param out <code>Writer</code> to use. */ public void output(Text text, Writer out) throws IOException { printText(out, text); out.flush(); } /** * Print out a <code>{@link Comment}</code>. * * @param comment <code>Comment</code> to output. * @param out <code>Writer</code> to use. */ public void output(Comment comment, Writer out) throws IOException { printComment(out, comment); out.flush(); } /** * Print out a <code>{@link ProcessingInstruction}</code>. * * @param pi <code>ProcessingInstruction</code> to output. * @param out <code>Writer</code> to use. */ public void output(ProcessingInstruction pi, Writer out) throws IOException { boolean currentEscapingPolicy = currentFormat.ignoreTrAXEscapingPIs; // Output PI verbatim, disregarding TrAX escaping PIs. currentFormat.setIgnoreTrAXEscapingPIs(true); printProcessingInstruction(out, pi); currentFormat.setIgnoreTrAXEscapingPIs(currentEscapingPolicy); out.flush(); } /** * Print out a <code>{@link EntityRef}</code>. * * @param entity <code>EntityRef</code> to output. * @param out <code>Writer</code> to use. */ public void output(EntityRef entity, Writer out) throws IOException { printEntityRef(out, entity); out.flush(); } // * * * * * * * * * * Output to a String * * * * * * * * * * // * * * * * * * * * * Output to a String * * * * * * * * * * /** * Return a string representing a document. Uses an internal * StringWriter. Warning: a String is Unicode, which may not match * the outputter's specified encoding. * * @param doc <code>Document</code> to format. */ public String outputString(Document doc) { StringWriter out = new StringWriter(); try { output(doc, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a DocType. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param doctype <code>DocType</code> to format. */ public String outputString(DocType doctype) { StringWriter out = new StringWriter(); try { output(doctype, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing an element. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param element <code>Element</code> to format. */ public String outputString(Element element) { StringWriter out = new StringWriter(); try { output(element, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a list of nodes. The list is * assumed to contain legal JDOM nodes. * * @param list <code>List</code> to format. */ public String outputString(List list) { StringWriter out = new StringWriter(); try { output(list, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a CDATA node. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param cdata <code>CDATA</code> to format. */ public String outputString(CDATA cdata) { StringWriter out = new StringWriter(); try { output(cdata, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a Text node. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param text <code>Text</code> to format. */ public String outputString(Text text) { StringWriter out = new StringWriter(); try { output(text, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a comment. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param comment <code>Comment</code> to format. */ public String outputString(Comment comment) { StringWriter out = new StringWriter(); try { output(comment, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing a PI. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param pi <code>ProcessingInstruction</code> to format. */ public String outputString(ProcessingInstruction pi) { StringWriter out = new StringWriter(); try { output(pi, out); // output() flushes } catch (IOException e) { } return out.toString(); } /** * Return a string representing an entity. Warning: a String is * Unicode, which may not match the outputter's specified * encoding. * * @param entity <code>EntityRef</code> to format. */ public String outputString(EntityRef entity) { StringWriter out = new StringWriter(); try { output(entity, out); // output() flushes } catch (IOException e) { } return out.toString(); } // * * * * * * * * * * Internal printing methods * * * * * * * * * * // * * * * * * * * * * Internal printing methods * * * * * * * * * * /** * This will handle printing of the declaration. * Assumes XML version 1.0 since we don't directly know. * * @param doc <code>Document</code> whose declaration to write. * @param out <code>Writer</code> to use. * @param encoding The encoding to add to the declaration */ protected void printDeclaration(Writer out, Document doc, String encoding) throws IOException { // Only print the declaration if it's not being omitted if (!userFormat.omitDeclaration) { // Assume 1.0 version out.write("<?xml version=\"1.0\""); if (!userFormat.omitEncoding) { out.write(" encoding=\"" + encoding + "\""); } out.write("?>"); // Print new line after decl always, even if no other new lines // Helps the output look better and is semantically // inconsequential out.write(currentFormat.lineSeparator); } } /** * This handle printing the DOCTYPE declaration if one exists. * * @param docType <code>Document</code> whose declaration to write. * @param out <code>Writer</code> to use. */ protected void printDocType(Writer out, DocType docType) throws IOException { String publicID = docType.getPublicID(); String systemID = docType.getSystemID(); String internalSubset = docType.getInternalSubset(); boolean hasPublic = false; out.write("<!DOCTYPE "); out.write(docType.getElementName()); if (publicID != null) { out.write(" PUBLIC \""); out.write(publicID); out.write("\""); hasPublic = true; } if (systemID != null) { if (!hasPublic) { out.write(" SYSTEM"); } out.write(" \""); out.write(systemID); out.write("\""); } if ((internalSubset != null) && (!internalSubset.equals(""))) { out.write(" ["); out.write(currentFormat.lineSeparator); out.write(docType.getInternalSubset()); out.write("]"); } out.write(">"); } /** * This will handle printing of comments. * * @param comment <code>Comment</code> to write. * @param out <code>Writer</code> to use. */ protected void printComment(Writer out, Comment comment) throws IOException { out.write("<!--"); out.write(comment.getText()); out.write("-->"); } /** * This will handle printing of processing instructions. * * @param pi <code>ProcessingInstruction</code> to write. * @param out <code>Writer</code> to use. */ protected void printProcessingInstruction(Writer out, ProcessingInstruction pi ) throws IOException { String target = pi.getTarget(); boolean piProcessed = false; if (currentFormat.ignoreTrAXEscapingPIs == false) { if (target.equals(Result.PI_DISABLE_OUTPUT_ESCAPING)) { escapeOutput = false; piProcessed = true; } else if (target.equals(Result.PI_ENABLE_OUTPUT_ESCAPING)) { escapeOutput = true; piProcessed = true; } } if (piProcessed == false) { String rawData = pi.getData(); // Write <?target data?> or if no data then just <?target?> if (!"".equals(rawData)) { out.write("<?"); out.write(target); out.write(" "); out.write(rawData); out.write("?>"); } else { out.write("<?"); out.write(target); out.write("?>"); } } } /** * This will handle printing a <code>{@link EntityRef}</code>. * Only the entity reference such as <code>&entity;</code> * will be printed. However, subclasses are free to override * this method to print the contents of the entity instead. * * @param entity <code>EntityRef</code> to output. * @param out <code>Writer</code> to use. */ protected void printEntityRef(Writer out, EntityRef entity) throws IOException { out.write("&"); out.write(entity.getName());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -