撑持链式方法生成/解析XML的Java类库 (依靠dom4j) - 代码共享
2013-03-26 05:36
597 查看
[代码] [Java]代码 import java.io.*; import java.util.List; import org.apache.commons.collections.ListUtils; import org.apache.commons.collections.Transformer; import org.dom4j.*; import org.dom4j.io. http://www.1111kp.info/linked/20130325.do *; public class XmlNode { private static final Transformer transformer = new Transformer() { @Override public Object transform(Object node) { return wrap((Element) node); } }; private final Element node; /** * Read a xml document and get root element. * * @param file */ public static XmlNode create(File file) { try { SAXReader reader = new SAXReader(); Document doc = reader.read(file); return wrap(doc.getRootElement()); } catch (DocumentException e) { throw uncheckThrowable(e); } } /** * Read a xml document and get root element. */ public static XmlNode create(InputStream is) { try { SAXReader reader = new SAXReader(); Document doc = reader.read(is); return wrap(doc.getRootElement()); } catch (DocumentException e) { throw uncheckThrowable(e); } } /** * Create a xml node with name. */ public static XmlNode create(String tagName) { return wrap(DocumentHelper.createElement(tagName)); } /** * Parses the given text as an XML document and returns the newly created * root node. */ public static XmlNode parseXml(String xml) { try { Document document = DocumentHelper.parseText(xml); return wrap(document.getRootElement()); } catch (DocumentException e) { throw uncheckThrowable(e); } } private static XmlNode wrap(Element node) { if (node == null) { return null; } return new XmlNode(node); } private XmlNode(Element node) { this.node = node; } public String getName() { return node.getName(); } public void setName(String value) { node.setName(value); } public String getText() { return node.getTextTrim(); } public void setText(String value) { node.setText(value); } /** * Get a unique xpath expression. * * @return */ public String getPath() { return node.getUniquePath(); } public XmlNode getParent() { return wrap(node.getParent()); } public boolean isRoot() { return node.isRootElement(); } /** * Return the new added node. * * @param tagName * @return */ public XmlNode addNode(String tagName) { return wrap(node.addElement(tagName)); } /** * Remove node from parent */ public void remove() { if (node.getParent() != null) { node.getParent().remove(node); } } public XmlNode element(String tagName) { return wrap(node.element(tagName)); } /** * Equals element(tagName).getText(). */ public String elementText(String tagName) { return node.elementTextTrim(tagName); } public List elements() { return ListUtils.transformedList(node.elements(), transformer); } public List elements(String tagName) { return ListUtils.transformedList(node.elements(tagName), transformer); } public XmlNode selectSingleNode(String xpath) { return wrap((Element) node.selectSingleNode(xpath)); } public List selectNodes(String xpath) { return ListUtils.transformedList(node.selectNodes(xpath), transformer); } public List attributes() { return ListUtils.transformedList(node.attributes(), XmlAttribute.transformer); } public XmlAttribute attribute(String name) { return new XmlAttribute(node.attribute(name)); } /** * Set the attribute value of the given name. * If value is null, the attribute will be removed. * * @param name * @param value */ public XmlNode attribute(String name, Object value) { if (value == null) { node.addAttribute(name, null); } else { node.addAttribute(name, value.toString()); } return this; } public String asXml() { return node.asXML(); } public String asFormatedXml() { try { OutputFormat format = OutputFormat.createPrettyPrint(); Writer out = new StringWriter(); XMLWriter writer = new XMLWriter(out, format); writer.write(node); writer.close(); return out.toString(); } catch (IOException e) { throw uncheckThrowable(e); } } public void write(OutputStream out, String encoding) { try { Document document = DocumentHelper.createDocument(node); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(encoding); XMLWriter writer = new XMLWriter(out, format); writer.write(document); } catch (IOException e) { throw uncheckThrowable(e); } } private RuntimeException uncheckThrowable(Throwable e) { return e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e); } public static class XmlAttribute { private static final Transformer transformer = new Transformer() { @Override public Object transform(Object node) { return new XmlAttribute((Attribute) node); } }; private final Attribute attr; public XmlAttribute(Attribute attr) { this.attr = attr; } public boolean exist() { return attr != null; } public String name() { return exist() ? attr.getName() : null; } public String value() { return exist() ? attr.getValue() : null; } public String asString() { return value(); } public String asString(String defaultValue) { return exist() ? attr.getValue() : defaultValue; } public Integer asInt() { return exist() ? Integer.valueOf(attr.getValue()) : null; } public Integer asInt(int defaultValue) { return exist() ? Integer.valueOf(attr.getValue()) : defaultValue; } public Double asDouble() { return exist() ? Double.valueOf(attr.getValue()) : null; } public Double asDouble(double defaultValue) { return exist() ? Double.valueOf(attr.getValue()) : defaultValue; } public Boolean asBoolean() { return exist() ? Boolean.valueOf(attr.getValue()) : null; } public Boolean asBoolean(boolean defaultValue) { return exist() ? Boolean.valueOf(attr.getValue()) : defaultValue; } } } http://www.aaafaipiao.com/linked/20130325.do
相关文章推荐
- Java解析XML的方法(Dom4j生成和解析XML)
- java中dom4j解析xml生成xml文档,dom4j工具压缩包原代码
- java使用dom4j生成与解析xml文档的方法示例
- 【Java编程】Dom4j解析和生成XML文档
- java生成解析xml的另外两种方法Xstream
- java解析xml方法:DOM解析、SAX解析、JDOM解析、DOM4J解析(转)
- Java中解析XML的四种常用方法(4)_DOM4J解析
- Java DOM4J方式生成XML的方法
- Java之dom4j的简单解析和生成xml的应用
- 在java中使用dom4j解析xml(示例代码)
- 在java中使用dom4j解析xml(示例代码)
- 在java中使用dom4j解析xml(示例代码)
- java解析xml方法:DOM解析、SAX解析、JDOM解析、DOM4J解析
- java之XML文件的解析方法Dom4j
- Java中四种生成和解析XML文档的方法详解
- Java如何从XML文件中获取节点信息的代码解析 Document方法
- 在java中使用dom4j解析xml(示例代码)
- 在java中使用dom4j解析xml(示例代码)
- 【转载并整理】JAVA解析或生成xml的四种方法
- java dom4j解析xml用到的几个方法