Java XML String Transform extractElement(String xml, String tagName)

Here you can find the source of extractElement(String xml, String tagName)

Description

extract Element

License

Open Source License

Declaration

public static String extractElement(String xml, String tagName) throws IOException 

Method Source Code


//package com.java2s;
/*//w w w  . j  av a2  s  . c  o m
 * Copyright (c) 2017 Public Library of Science
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;

public class Main {
    public static String extractElement(String xml, String tagName) throws IOException {
        InputSource xmlSource = new InputSource(new StringReader(xml));
        return createXmlString(extractElement(createXmlDocument(xmlSource), tagName));
    }

    public static String extractElement(InputStream xmlStream, String tagName) throws IOException {
        try {
            return createXmlString(extractElement(createXmlDocument(new InputSource(xmlStream)), tagName));
        } finally {
            xmlStream.close();
        }
    }

    private static Element extractElement(Document xmlDoc, String tagName) {
        return (Element) xmlDoc.getElementsByTagName(tagName).item(0);
    }

    private static String createXmlString(Node node) {
        Transformer transformer;
        try {
            transformer = TransformerFactory.newInstance().newTransformer(); // not thread-safe
        } catch (TransformerConfigurationException e) {
            throw new RuntimeException(e); // Should be impossible; we are using default configuration
        }
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        StringWriter xml = new StringWriter();
        try {
            transformer.transform(new DOMSource(node), new StreamResult(xml));
        } catch (TransformerException e) {
            throw new RuntimeException(e);
        }
        return xml.toString();

    }

    private static Document createXmlDocument(InputSource xmlSource) throws IOException {
        try {
            return newDocumentBuilder().parse(xmlSource);
        } catch (SAXException e) {
            throw new RuntimeException("Invalid XML syntax during document creation", e);
        }
    }

    /**
     * Construct a non-validating document builder. We assume that we don't want to connect to remote servers to validate
     * except with a specific reason.
     *
     * @return a new document builder
     */
    static DocumentBuilder newDocumentBuilder() {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // at a minimum the document builder needs to be namespace aware
        factory.setNamespaceAware(true);
        factory.setValidating(false);
        try {
            factory.setFeature("http://xml.org/sax/features/validation", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            return factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            throw new RuntimeException(e);
        }
    }
}

Related

  1. elementToXMLString(Object aElement)
  2. encode(final String value)
  3. encodeStringIntoMemento(String str)
  4. escapeBackslashes(String value)
  5. extractAndNormalizeEmbedPictures(String xmlFile, String odtFile, String parentDir, String imgBaseDir)
  6. extractText(Node n, StringBuffer buf)
  7. fileToXMLString(String filename)
  8. getAsXMLString(final Node node)
  9. getBeanDefinition(String beanId, File file)