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