📄 xmlutils.java
字号:
/* * Licensed under the X license (see http://www.x.org/terms.htm) */package org.ofbiz.minerva.pool.xml;import java.lang.reflect.*;import java.util.*;import org.w3c.dom.*;/** * Utility functions for parsing XML (DOM). * * @author Aaron Mulder (ammulder@alumni.princeton.edu) */public abstract class XMLUtils { public static String getChildText(Element parent, String name) { Element e = getChildByName(parent, name); if (e == null) return ""; return getText(e); } public static String getText(Element e) { NodeList nl = e.getChildNodes(); int max = nl.getLength(); for (int i = 0; i < max; i++) { Node n = nl.item(i); if (n.getNodeType() == Node.TEXT_NODE) { return n.getNodeValue(); } } return ""; } public static Element getChildByName(Element e, String name) { Element[] list = getChildrenByName(e, name); if (list.length == 0) return null; if (list.length > 1) throw new IllegalStateException("Too many (" + list.length + ") '" + name + "' elements found!"); return list[0]; } public static Element[] getChildrenByName(Element e, String name) { NodeList nl = e.getChildNodes(); int max = nl.getLength(); LinkedList list = new LinkedList(); for (int i = 0; i < max; i++) { Node n = nl.item(i); if (n.getNodeType() == Node.ELEMENT_NODE && n.getNodeName().equals(name)) { list.add(n); } } return (Element[]) list.toArray(new Element[list.size()]); } public static String[] splitOnWhitespace(String source) { int pos = -1; LinkedList list = new LinkedList(); int max = source.length(); for (int i = 0; i < max; i++) { char c = source.charAt(i); if (Character.isWhitespace(c)) { if (i - pos > 1) list.add(source.substring(pos + 1, i)); pos = i; } } return (String[]) list.toArray(new String[list.size()]); } public static Element createChild(Document doc, Element root, String name) { Element elem = doc.createElement(name); root.appendChild(elem); return elem; } public static void createChildText(Document doc, Element elem, String name, String value) { Element child = doc.createElement(name); child.appendChild(doc.createTextNode(value == null ? "" : value)); elem.appendChild(child); } public static void createOptionalChildText(Document doc, Element elem, String name, String value) { if (value == null || value.length() == 0) return; Element child = doc.createElement(name); child.appendChild(doc.createTextNode(value)); elem.appendChild(child); } public static Map getProperties(Element root) { Map map = new HashMap(); Element[] list = getChildrenByName(root, "property"); for (int i = 0; i < list.length; i++) { String name = list[i].getAttribute("name"); String type = list[i].getAttribute("type"); String valueString = getText(list[i]); try { Class cls = Class.forName(type); Constructor con = cls.getConstructor(new Class[]{String.class}); Object value = con.newInstance(new Object[]{valueString}); map.put(name, value); } catch (Exception e) { System.out.println("Unable to parse property '" + name + "'='" + valueString + "': " + e); } } return map; } public static void applyProperties(Object o, Element root) { Map map = getProperties(root); Iterator it = map.keySet().iterator(); Field[] fields = o.getClass().getFields(); Method[] methods = o.getClass().getMethods(); while (it.hasNext()) { String name = (String) it.next(); Object value = map.get(name); try { for (int i = 0; i < fields.length; i++) { if (fields[i].getName().equalsIgnoreCase(name) && isTypeMatch(fields[i].getType(), value.getClass())) { fields[i].set(o, value); System.out.println("Set field " + fields[i].getName() + "=" + value); break; } } for (int i = 0; i < methods.length; i++) { if (methods[i].getName().equalsIgnoreCase("set" + name) && methods[i].getParameterTypes().length == 1 && isTypeMatch(methods[i].getParameterTypes()[0], value.getClass())) { methods[i].invoke(o, new Object[]{value}); System.out.println("Set method " + methods[i].getName() + "=" + value); break; } } } catch (Exception e) { System.out.println("Unable to apply property '" + name + "': " + e); } } } private static boolean isTypeMatch(Class one, Class two) { if (one.equals(two)) return true; if (one.isPrimitive()) { if (one.getName().equals("int") && two.getName().equals("java.lang.Integer")) return true; if (one.getName().equals("long") && two.getName().equals("java.lang.Long")) return true; if (one.getName().equals("float") && two.getName().equals("java.lang.Float")) return true; if (one.getName().equals("double") && two.getName().equals("java.lang.Double")) return true; if (one.getName().equals("char") && two.getName().equals("java.lang.Character")) return true; if (one.getName().equals("byte") && two.getName().equals("java.lang.Byte")) return true; if (one.getName().equals("short") && two.getName().equals("java.lang.Short")) return true; if (one.getName().equals("boolean") && two.getName().equals("java.lang.Boolean")) return true; } return false; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -