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