📄 domoutputter.java
字号:
}
catch (ClassNotFoundException e) {
// e.printStackTrace();
}
catch (IllegalAccessException e) {
// e.printStackTrace();
}
catch (InstantiationException e) {
// e.printStackTrace();
}
}
// If no DOM doc yet, try to use a hard coded default
try {
DOMAdapter adapter = (DOMAdapter)
Class.forName(DEFAULT_ADAPTER_CLASS).newInstance();
return adapter.createDocument(dt);
// System.out.println("Using default " +
// DEFAULT_ADAPTER_CLASS);
}
catch (ClassNotFoundException e) {
// e.printStackTrace();
}
catch (IllegalAccessException e) {
// e.printStackTrace();
}
catch (InstantiationException e) {
// e.printStackTrace();
}
throw new JDOMException("No JAXP or default parser available");
}
private org.w3c.dom.Element output(Element element,
org.w3c.dom.Document domDoc,
NamespaceStack namespaces)
throws JDOMException {
try {
int previouslyDeclaredNamespaces = namespaces.size();
org.w3c.dom.Element domElement = null;
if (element.getNamespace() == Namespace.NO_NAMESPACE) {
// No namespace, use createElement
domElement = forceNamespaceAware ?
domDoc.createElementNS(null, element.getQualifiedName())
: domDoc.createElement(element.getQualifiedName()); }
else {
domElement = domDoc.createElementNS(
element.getNamespaceURI(),
element.getQualifiedName());
}
// Add namespace attributes, beginning with the element's own
// Do this only if it's not the XML namespace and it's
// not the NO_NAMESPACE with the prefix "" not yet mapped
// (we do output xmlns="" if the "" prefix was already used
// and we need to reclaim it for the NO_NAMESPACE)
Namespace ns = element.getNamespace();
if (ns != Namespace.XML_NAMESPACE &&
!(ns == Namespace.NO_NAMESPACE &&
namespaces.getURI("") == null)) {
String prefix = ns.getPrefix();
String uri = namespaces.getURI(prefix);
if (!ns.getURI().equals(uri)) { // output a new namespace decl
namespaces.push(ns);
String attrName = getXmlnsTagFor(ns);
domElement.setAttribute(attrName, ns.getURI());
}
}
// Add additional namespaces also
Iterator itr = element.getAdditionalNamespaces().iterator();
while (itr.hasNext()) {
Namespace additional = (Namespace)itr.next();
String prefix = additional.getPrefix();
String uri = namespaces.getURI(prefix);
if (!additional.getURI().equals(uri)) {
String attrName = getXmlnsTagFor(additional);
domElement.setAttribute(attrName, additional.getURI());
namespaces.push(additional);
}
}
// Add attributes to the DOM element
itr = element.getAttributes().iterator();
while (itr.hasNext()) {
Attribute attribute = (Attribute) itr.next();
domElement.setAttributeNode(output(attribute, domDoc));
Namespace ns1 = attribute.getNamespace();
if ((ns1 != Namespace.NO_NAMESPACE) &&
(ns1 != Namespace.XML_NAMESPACE)) {
String prefix = ns1.getPrefix();
String uri = namespaces.getURI(prefix);
if (!ns1.getURI().equals(uri)) { // output a new decl
String attrName = getXmlnsTagFor(ns1);
domElement.setAttribute(attrName, ns1.getURI());
namespaces.push(ns1);
}
}
// Crimson doesn't like setAttributeNS() for non-NS attribs
if (attribute.getNamespace() == Namespace.NO_NAMESPACE) {
// No namespace, use setAttribute
if (forceNamespaceAware) {
domElement.setAttributeNS(null,
attribute.getQualifiedName(),
attribute.getValue());
} else {
domElement.setAttribute(attribute.getQualifiedName(),
attribute.getValue());
}
}
else {
domElement.setAttributeNS(attribute.getNamespaceURI(),
attribute.getQualifiedName(),
attribute.getValue());
}
}
// Add content to the DOM element
itr = element.getContent().iterator();
while (itr.hasNext()) {
Object node = itr.next();
if (node instanceof Element) {
Element e = (Element) node;
org.w3c.dom.Element domElt = output(e, domDoc, namespaces);
domElement.appendChild(domElt);
}
else if (node instanceof String) {
String str = (String) node;
org.w3c.dom.Text domText = domDoc.createTextNode(str);
domElement.appendChild(domText);
}
else if (node instanceof CDATA) {
CDATA cdata = (CDATA) node;
org.w3c.dom.CDATASection domCdata =
domDoc.createCDATASection(cdata.getText());
domElement.appendChild(domCdata);
}
else if (node instanceof Text) {
Text text = (Text) node;
org.w3c.dom.Text domText =
domDoc.createTextNode(text.getText());
domElement.appendChild(domText);
}
else if (node instanceof Comment) {
Comment comment = (Comment) node;
org.w3c.dom.Comment domComment =
domDoc.createComment(comment.getText());
domElement.appendChild(domComment);
}
else if (node instanceof ProcessingInstruction) {
ProcessingInstruction pi =
(ProcessingInstruction) node;
org.w3c.dom.ProcessingInstruction domPI =
domDoc.createProcessingInstruction(
pi.getTarget(), pi.getData());
domElement.appendChild(domPI);
}
else if (node instanceof EntityRef) {
EntityRef entity = (EntityRef) node;
org.w3c.dom.EntityReference domEntity =
domDoc.createEntityReference(entity.getName());
domElement.appendChild(domEntity);
}
else {
throw new JDOMException(
"Element contained content with type:" +
node.getClass().getName());
}
}
// Remove declared namespaces from stack
while (namespaces.size() > previouslyDeclaredNamespaces) {
namespaces.pop();
}
return domElement;
}
catch (Exception e) {
throw new JDOMException("Exception outputting Element " +
element.getQualifiedName(), e);
}
}
private org.w3c.dom.Attr output(Attribute attribute,
org.w3c.dom.Document domDoc)
throws JDOMException {
org.w3c.dom.Attr domAttr = null;
try {
if (attribute.getNamespace() == Namespace.NO_NAMESPACE) {
// No namespace, use createAttribute
if (forceNamespaceAware) {
domAttr = domDoc.createAttributeNS(null, attribute.getQualifiedName());
} else {
domAttr = domDoc.createAttribute(attribute.getQualifiedName());
}
}
else {
domAttr = domDoc.createAttributeNS(attribute.getNamespaceURI(),
attribute.getQualifiedName());
}
domAttr.setValue(attribute.getValue());
} catch (Exception e) {
throw new JDOMException("Exception outputting Attribute " +
attribute.getQualifiedName(), e);
}
return domAttr;
}
/**
* This will handle adding any <code>{@link Namespace}</code>
* attributes to the DOM tree.
*
* @param ns <code>Namespace</code> to add definition of
*/
private static String getXmlnsTagFor(Namespace ns) {
String attrName = "xmlns";
if (!ns.getPrefix().equals("")) {
attrName += ":";
attrName += ns.getPrefix();
}
return attrName;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -