⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saxoutputter.java

📁 openlogic-jdom-1.1-all-src-1.zip 可以用于操作xml文件
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        // Output node list as a document fragment.        elementContent(nodes, new NamespaceStack());    }    /**     * This will output a single JDOM nodes as a fragment of an XML     * document, firing off the SAX events that have been registered.     * <p>     * <strong>Warning</strong>: This method does not call the     * {@link ContentHandler#setDocumentLocator},     * {@link ContentHandler#startDocument} and     * {@link ContentHandler#endDocument} callbacks on the     * {@link #setContentHandler ContentHandler}.  The user shall     * invoke these methods directly prior/after outputting the     * document fragments.</p>     *     * @param node the <code>Content</code> node to output.     *     * @throws JDOMException if any error occurred.     *     * @see #outputFragment(java.util.List)     */    public void outputFragment(Content node) throws JDOMException {        if (node == null) {            return;        }        // Output single node as a document fragment.        elementContent(node, new NamespaceStack());    }    /**     * This parses a DTD declaration to fire the related events towards     * the registered handlers.     *     * @param document <code>JDOM Document</code> the DocType is to     *                 process.     */    private void dtdEvents(Document document) throws JDOMException {        DocType docType = document.getDocType();        // Fire DTD-related events only if handlers have been registered.        if ((docType != null) &&            ((dtdHandler != null) || (declHandler != null))) {            // Build a dummy XML document that only references the DTD...            String dtdDoc = new XMLOutputter().outputString(docType);            try {                // And parse it to fire DTD events.                createDTDParser().parse(new InputSource(                                                new StringReader(dtdDoc)));                // We should never reach this point as the document is                // ill-formed; it does not have any root element.            }            catch (SAXParseException e) {                // Expected exception: There's no root element in document.            }            catch (SAXException e) {                throw new JDOMException("DTD parsing error", e);            }            catch (IOException e) {                throw new JDOMException("DTD parsing error", e);            }        }    }    /**     * <p>     * This method tells you the line of the XML file being parsed.     * For an in-memory document, it's meaningless. The location     * is only valid for the current parsing lifecycle, but     * the document has already been parsed. Therefore, it returns     * -1 for both line and column numbers.     * </p>     *     * @param document JDOM <code>Document</code>.     */    private void documentLocator(Document document) {        locator = new JDOMLocator();        String publicID = null;        String systemID = null;        if (document != null) {            DocType docType = document.getDocType();            if (docType != null) {                publicID = docType.getPublicID();                systemID = docType.getSystemID();            }        }        locator.setPublicId(publicID);        locator.setSystemId(systemID);        locator.setLineNumber(-1);        locator.setColumnNumber(-1);        contentHandler.setDocumentLocator(locator);    }    /**     * <p>     * This method is always the second method of all callbacks in     * all handlers to be invoked (setDocumentLocator is always first).     * </p>     */    private void startDocument() throws JDOMException {        try {            contentHandler.startDocument();        }        catch (SAXException se) {            throw new JDOMException("Exception in startDocument", se);        }    }    /**     * <p>     * Always the last method of all callbacks in all handlers     * to be invoked.     * </p>     */    private void endDocument() throws JDOMException {        try {            contentHandler.endDocument();            // reset locator            locator = null;        }        catch (SAXException se) {            throw new JDOMException("Exception in endDocument", se);        }    }    /**     * <p>     * This will invoke the <code>ContentHandler.processingInstruction</code>     * callback when a processing instruction is encountered.     * </p>     *     * @param pi <code>ProcessingInstruction</code> containing target and data.     */    private void processingInstruction(ProcessingInstruction pi)                           throws JDOMException {        if (pi != null) {            String target = pi.getTarget();            String data = pi.getData();            try {                contentHandler.processingInstruction(target, data);            }            catch (SAXException se) {                throw new JDOMException(                    "Exception in processingInstruction", se);            }        }    }    /**     * <p>     * This will recursively invoke all of the callbacks for a particular     * element.     * </p>     *     * @param element <code>Element</code> used in callbacks.     * @param namespaces <code>List</code> stack of Namespaces in scope.     */    private void element(Element element, NamespaceStack namespaces)                           throws JDOMException {        // used to check endPrefixMapping        int previouslyDeclaredNamespaces = namespaces.size();        // contentHandler.startPrefixMapping()        Attributes nsAtts = startPrefixMapping(element, namespaces);        // contentHandler.startElement()        startElement(element, nsAtts);        // handle content in the element        elementContent(element.getContent(), namespaces);        // update locator        if (locator != null) {          locator.setNode(element);        }        // contentHandler.endElement()        endElement(element);        // contentHandler.endPrefixMapping()        endPrefixMapping(namespaces, previouslyDeclaredNamespaces);    }    /**     * <p>     * This will invoke the <code>ContentHandler.startPrefixMapping</code>     * callback     * when a new namespace is encountered in the <code>Document</code>.     * </p>     *     * @param element <code>Element</code> used in callbacks.     * @param namespaces <code>List</code> stack of Namespaces in scope.     *     * @return <code>Attributes</code> declaring the namespaces local to     * <code>element</code> or <code>null</code>.     */    private Attributes startPrefixMapping(Element element,                                          NamespaceStack namespaces)                                                   throws JDOMException {        AttributesImpl nsAtts = null;   // The namespaces as xmlns attributes        Namespace ns = element.getNamespace();        if (ns != Namespace.XML_NAMESPACE) {            String prefix = ns.getPrefix();            String uri = namespaces.getURI(prefix);            if (!ns.getURI().equals(uri)) {                namespaces.push(ns);                nsAtts = this.addNsAttribute(nsAtts, ns);                try {                    contentHandler.startPrefixMapping(prefix, ns.getURI());                }                catch (SAXException se) {                   throw new JDOMException(                       "Exception in startPrefixMapping", se);                }            }        }        // Fire additional namespace declarations        List additionalNamespaces = element.getAdditionalNamespaces();        if (additionalNamespaces != null) {            Iterator itr = additionalNamespaces.iterator();            while (itr.hasNext()) {                ns = (Namespace)itr.next();                String prefix = ns.getPrefix();                String uri = namespaces.getURI(prefix);                if (!ns.getURI().equals(uri)) {                    namespaces.push(ns);                    nsAtts = this.addNsAttribute(nsAtts, ns);                    try {                        contentHandler.startPrefixMapping(prefix, ns.getURI());                    }                    catch (SAXException se) {                        throw new JDOMException(                            "Exception in startPrefixMapping", se);                    }                }            }        }        return nsAtts;    }    /**     * <p>     * This will invoke the <code>endPrefixMapping</code> callback in the     * <code>ContentHandler</code> when a namespace is goes out of scope     * in the <code>Document</code>.     * </p>     *     * @param namespaces <code>List</code> stack of Namespaces in scope.     * @param previouslyDeclaredNamespaces number of previously declared     * namespaces     */    private void endPrefixMapping(NamespaceStack namespaces,                                  int previouslyDeclaredNamespaces)                                                throws JDOMException {        while (namespaces.size() > previouslyDeclaredNamespaces) {            String prefix = namespaces.pop();            try {                contentHandler.endPrefixMapping(prefix);            }            catch (SAXException se) {                throw new JDOMException("Exception in endPrefixMapping", se);            }        }    }    /**     * <p>     * This will invoke the <code>startElement</code> callback     * in the <code>ContentHandler</code>.     * </p>     *     * @param element <code>Element</code> used in callbacks.     * @param nsAtts <code>List</code> of namespaces to declare with     * the element or <code>null</code>.     */    private void startElement(Element element, Attributes nsAtts)                      throws JDOMException {        String namespaceURI = element.getNamespaceURI();        String localName = element.getName();        String rawName = element.getQualifiedName();        // Allocate attribute list.        AttributesImpl atts = (nsAtts != null)?                              new AttributesImpl(nsAtts): new AttributesImpl();        List attributes = element.getAttributes();        Iterator i = attributes.iterator();        while (i.hasNext()) {            Attribute a = (Attribute) i.next();            atts.addAttribute(a.getNamespaceURI(),                              a.getName(),                              a.getQualifiedName(),                              getAttributeTypeName(a.getAttributeType()),                              a.getValue());        }        try {            contentHandler.startElement(namespaceURI, localName, rawName, atts);        }        catch (SAXException se) {            throw new JDOMException("Exception in startElement", se);        }    }    /**     * <p>     * This will invoke the <code>endElement</code> callback     * in the <code>ContentHandler</code>.     * </p>     *     * @param element <code>Element</code> used in callbacks.     */    private void endElement(Element element) throws JDOMException {        String namespaceURI = element.getNamespaceURI();        String localName = element.getName();        String rawName = element.getQualifiedName();        try {            contentHandler.endElement(namespaceURI, localName, rawName);        }        catch (SAXException se) {            throw new JDOMException("Exception in endElement", se);        }    }    /**     * <p>     * This will invoke the callbacks for the content of an element.     * </p>     *     * @param content element content as a <code>List</code> of nodes.     * @param namespaces <code>List</code> stack of Namespaces in scope.     */    private void elementContent(List content, NamespaceStack namespaces)                      throws JDOMException {        for (Iterator i=content.iterator(); i.hasNext(); ) {            Object obj = i.next();            if (obj instanceof Content) {                this.elementContent((Content)obj, namespaces);            }            else {                // Not a valid element child. This could happen with                // application-provided lists which may contain non                // JDOM objects.                handleError(new JDOMException(                                        "Invalid element content: " + obj));            }        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -