All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.s1.web.formats.Xml Maven / Gradle / Ivy

There is a newer version: 0.1.3
Show newest version
package org.s1.web.formats;

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.*;

/**
 * XML Format helper. Contains useful methods
 *
 * @author Grigory Pykhov
 */
public class Xml {

    private Xml(){}


    /**
     * Get element
     *
     * @param el Element
     * @param path Path
     * @return Element
     */
    public static Element getElement(Element el, String path){
        return getElement(el,path,null);
    }

    /**
     * Get element
     *
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @return Element
     */
    public static Element getElement(Element el, String path, Map namespaces){
        if(namespaces==null)
            namespaces = new HashMap();
        Element ret = null;
        try {
            String[] parts = tokenizePath(path);
            Element o = el;
            for (int i = 0; i < parts.length; i++) {
                int j = getNumber(parts[i]);
                String name = getLocalName(parts[i]);
                String ns = getNamespaceURI(parts[i],namespaces);
                if(name.equals("*"))
                    name = null;
                o = getChildElement(j,o,name,ns);
            }
            if (o != null){
                ret = o;
            }
        } catch (Throwable e) {
        }
        return ret;
    }

    /**
     * Get element list
     *
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @return Founded elements
     */
    public static List getElementList(Element el, String path, Map namespaces){
        if(namespaces==null)
            namespaces = new HashMap();
        List ret = new ArrayList();
        String[] parts = tokenizePath(path);
        fillElementList(el, Arrays.asList(el), parts, namespaces, ret);
        return ret;
    }

    /**
     * Get element list
     *
     * @param el Element
     * @param path Path
     * @return Founded elements
     */
    public static List getElementList(Element el, String path){
        return getElementList(el, path,null);
    }

    private static void fillElementList(Element el, List roots, String[] parts, Map namespaces, List res){
        for(Element ret: roots){
            try {
                Element o = el;
                for (int i = 0; i < parts.length; i++) {
                    int j = getNumber(parts[i]);
                    String name = getLocalName(parts[i]);
                    String ns = getNamespaceURI(parts[i],namespaces);
                    if(name.equals("*"))
                        name = null;
                    List l = getChildElementList(o,name,ns);
                    if(parts[i].contains("[")){
                        o = l.get(j);
                    }else if(l.size()>1){
                        if(parts.length-i-1>0){
                            String [] parts2 = new String[parts.length-i-1];
                            for(int k=0;k Type
     * @return Casted object
     */
    public static   T get(Class t, Element el, String path){
        return Types.cast(get(el,path, null, null), t);
    }

    /**
     * Get and cast
     *
     * @param t Type
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @param  Type
     * @return Casted object
     */
    public static   T get(Class t, Element el, String path, Map namespaces){
        return Types.cast(get(el,path, namespaces, null), t);
    }

    /**
     * Get and cast
     *
     * @param t Type
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @param def Default value
     * @param  Type
     * @return Casted object
     */
    public static   T get(Class t, Element el, String path, Map namespaces, T def){
        T v = Types.cast(get(el,path, namespaces, null), t);
        if(v==null)
            v = def;
        return v;
    }

    /**
     * Get
     *
     * @param el Element
     * @param path Path
     * @return Object
     */
    public static String get(Element el, String path){
        return get(el,path,null,null);
    }

    /**
     * Get
     *
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @return Object
     */
    public static String get(Element el, String path, Map namespaces){
        return get(el, path,namespaces,null);
    }

    /**
     * Get
     *
     * @param el Element
     * @param path Path
     * @param namespaces Namespaces
     * @param defVal Default value
     * @return Object
     */
    public static String get(Element el, String path, Map namespaces, String defVal){
        if(namespaces==null)
            namespaces = new HashMap();
        String ret = null;
        try {
            String[] parts = tokenizePath(path);
            for (int i = 0; i < parts.length; i++) {
                int j = getNumber(parts[i]);
                String name = getLocalName(parts[i]);
                String ns = getNamespaceURI(parts[i],namespaces);
                if(parts[i].startsWith("@")){
                    NamedNodeMap attrs = el.getAttributes();
                    for(int k=0;k ns) {
        if(name.startsWith("@"))
            name = name.substring(1);
        if(name.contains("["))
            name = name.substring(0,name.indexOf("["));
        if(name.contains(":"))
            name = name.substring(0,name.indexOf(":"));
        else
            name = null;
        if(name!=null && !name.isEmpty())
            name = ns.get(name);
        return name;
    }

    public static Element getChildElement(int number, Element el, String name, String ns){
        List lst = getChildElementList(el,name,ns);
        if(number<0)
            number = lst.size()-1;

        if(number>=0 && number getChildElementList(Element el, String name, String ns){
        List lst = new ArrayList();
        NodeList nl = el.getChildNodes();
        for(int i=0;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy