![JAR search and dependency download from the Maven repository](/logo.png)
org.s1.web.formats.Xml Maven / Gradle / Ivy
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