文档章节

XML Utility

markGao
 markGao
发布于 2013/12/31 11:38
字数 830
阅读 26
收藏 0
点赞 0
评论 0
package sample;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.Writer;

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.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * XML utility class.
 * 
 * @author $Author: Lihong Gao $
 */
public final class XMLUtil {

    /** Hide default constructor */
    private XMLUtil() {
    }

    /**
     * Selects single node specified by the XPath expression.
     * 
     * @param current
     *            XPath query root node
     * @param xpath
     *            XPath expression
     * @return Selected node
     * @throws AIUException
     *             Indicates more than one nodes are selected
     */
    public static Node selectSingleNode(Node current, String xpath)
            throws Exception {
        // final String method = "selectSingleNode(Node,String)";

        NodeList list = selectNodes(current, xpath);
        if (list == null || list.getLength() == 0) {
            return null;
        } else if (list.getLength() == 1) {
            return list.item(0);
        } else {
            throw new Exception("More than one nodes are selected");
        }
    }

    /**
     * Selects list of nodes specified by the XPath expression.
     * 
     * @param current
     *            XPath query root node
     * @param xpath
     *            XPath expression
     * @return Selected node list
     * @throws AIUException
     *             Indicates XML transform failure
     */
    public static NodeList selectNodes(Node current, String xpath)
            throws Exception {
        // final String method = "selectNodes(Node,String)";

        if (current instanceof Element && xpath.indexOf('/') == -1
                && xpath.indexOf('[') == -1) {
            return ((Element) current).getElementsByTagName(xpath);
        } else {
            String xltString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                    + "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"
                    + "<xsl:output version=\"1.0\" method=\"xml\" encoding=\"utf-8\" />"
                    + "<xsl:template match=\"" + xpath + "\">"
                    + "<xsl:copy-of select=\".\" />" + "</xsl:template>"
                    + "<xsl:template match=\"text()\"/>" + "</xsl:stylesheet>";

            try {
                Element result = (Element) current.cloneNode(false);
                StreamSource template = new StreamSource(new StringReader(
                        xltString));

                TransformerFactory transformerFactory = TransformerFactory
                        .newInstance();
                Transformer transformer = transformerFactory
                        .newTransformer(template);
                transformer.transform(new DOMSource(current), new DOMResult(
                        result));
                return result.getChildNodes();
            } catch (TransformerException ex) {
                throw new Exception(ex.getMessage(), ex);
            }
        }
    }

    /**
     * Retrieves text node values as text recursively.
     * 
     * @param root
     *            Root node
     * @param xpath
     *            XPath expression
     * @return String representation of text nodes
     * @throws Exception
     *             Indicates more than one nodes are selected
     */
    public static String getTextValue(Node root, String xpath) throws Exception {
        StringBuffer buf = new StringBuffer();

        Node node = selectSingleNode(root, xpath);
        if (node == null) {
            return null;
        }

        NodeList children = node.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            Node child = children.item(i);
            if (child.getNodeType() == Node.TEXT_NODE) {
                buf.append(child.getNodeValue());
            }
        }

        return buf.toString();
    }

    /**
     * Removes all elements specified by element name.
     * 
     * @param node
     *            Node to modify
     * @param name
     *            Element name
     */
    public static void removeNode(Node node, String name) {
        NodeList nodes = ((Element) node).getElementsByTagName(name);
        if (nodes != null) {
            for (int i = 0; i < nodes.getLength(); i++) {
                node.removeChild(nodes.item(i));
            }
        }
    }

    /**
     * Exports DOM node tree to specified output stream.
     * 
     * @param root
     *            Root node
     * @param out
     *            Output writer
     * @throws Exception
     *             Indicates failed to export nodes
     */
    public static void exportNodes(Node root, Writer out) throws Exception {
        exportNodes(root, new StreamResult(out));
    }

    /**
     * Exports DOM node tree to specified output stream.
     * 
     * @param root
     *            Root node
     * @param out
     *            Output stream
     * @throws Exception
     *             Indicates failed to export nodes
     */
    public static void exportNodes(Node root, OutputStream out)
            throws Exception {
        exportNodes(root, new StreamResult(out));
    }

    /**
     * Exports DOM node tree to specified output stream.
     * 
     * @param root
     *            Root node
     * @param result
     *            Result
     * @throws Exception
     *             Indicates failed to export nodes
     */
    public static void exportNodes(Node root, StreamResult result)
            throws Exception {
        // final String method = "exportNodes(Node,OutputStream)";
        final String xltString = "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>"
                + "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"
                + "<xsl:output method=\"xml\" version=\"1.0\" encoding=\"Shift_JIS\" omit-xml-declaration=\"yes\" />"
                + "<xsl:template match=\"*\">"
                + "<xsl:copy-of select=\".\" />"
                + "</xsl:template>" + "</xsl:stylesheet>";

        try {
            StreamSource template = new StreamSource(
                    new StringReader(xltString));
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(template);
            transformer.setOutputProperty(OutputKeys.ENCODING, "Shift_JIS");
            transformer.transform(new DOMSource(root), result);
        } catch (TransformerException ex) {
            throw new TransformerException(ex.getMessage(), ex);
        }
    }

    /**
     * Converts Node to Document.
     * 
     * @param node
     *            Node
     * @return Document
     * @throws Exception
     *             Indicates failed to convert.
     */
    public static Document convertToDocument(Node node) throws Exception {
        Document doc = createDocument();
        doc.appendChild(doc.importNode(node, true));
        return doc;
    }

    /**
     * Constructs new Document.
     * 
     * @return Document
     * @throws Exception
     *             Indicates failed to convert.
     */
    public static Document createDocument() throws Exception {
        // final String method = "createDocument()";
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            return builder.newDocument();
        } catch (DOMException e) {
            throw new DOMException(ISeverityLevels.IMPORTANT, e.getMessage());
        } catch (ParserConfigurationException e) {
            throw new ParserConfigurationException(e.getMessage());
        }
    }

    /**
     * Parses specified XML and returns constructed document.
     * 
     * @param xml
     *            XML to parse
     * @return Document
     * @throws Exception
     *             Indicates failed to convert.
     */
    public static Document parseDocument(String xml) throws Exception {
        // final String method = "parseDocument(String)";
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            return builder.parse(new InputSource(new StringReader(xml)));
        } catch (IOException e) {
            throw new IOException(e.getMessage(), e);
        } catch (DOMException e) {
            throw new DOMException(ISeverityLevels.IMPORTANT, e.getMessage());
        } catch (ParserConfigurationException e) {
            throw new ParserConfigurationException(e.getMessage());
        } catch (SAXException e) {
            throw new SAXException(e.getMessage(), e);
        }
    }

    public interface ISeverityLevels {
        // severity levels for Exceptions and Logging
        public final static short CRITICAL = 1;
        public final static short IMPORTANT = 4;
        public final static short WARNING = 7;
        public final static short INFORMATIONAL = 10;
        public final static short DEBUG = 13;
        public final static short VERBOSE = 16;
    }

    public static String getXmlString(String inFilename) throws Exception {
        StringBuffer sb = new StringBuffer();
        BufferedReader reader = new BufferedReader(new FileReader(new File(
                inFilename)));
        try {
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } finally {
            reader.close();
        }
    }

}


© 著作权归作者所有

共有 人打赏支持
markGao
粉丝 15
博文 151
码字总数 91352
作品 0
宝山
程序员
Jenkins中使用Git和Maven之多个项目

1.应用Aggregation管理多个子项目 Maven中有一个Aggregation(聚合),可以将多个项目作为模块添加到一个pom.xml中,然后告诉Jenkins这个顶层pom.xml,就可以自动从Git中拿出这些项目的源代码...

长平狐 ⋅ 2012/08/28 ⋅ 0

四种Sandcastle方法生成帮助类帮助文档

方法一、Visual Studio新建documentation生成帮助文档 前段时间在网上收集和自己平时工作总结整理了《干货,比较全面的c#.net公共帮助类》,整理完成上传github之后我又想,既然是帮助类,总得...

安与生_ ⋅ 2017/10/18 ⋅ 0

xmlObjectifier

The end of DOM Tree walking is here! This small and fast utility converts an XML file fetched through $.ajax to a JavaScript Object, completely eliminating a need to use DOM Tre......

匿名 ⋅ 2008/09/19 ⋅ 0

在Eclipse下 Ant打包报错

这个是build.xml源文件

時間會抹平那些皺褶遺 ⋅ 2015/08/11 ⋅ 1

XMLFoundation April 2014 发布

XMLFoundation April 2014 发布,此版本更新内容如下: run the Microsoft Code Analysis in MSDev2012, reviewedall output, silenced some warnings, and added a few if(!Null) checks a......

oschina ⋅ 2014/04/10 ⋅ 0

Yahoo javascript 开源界面库YUI 和EXT

清清月儿整理 [yui][译]Yahoo!User Interface Libray 介绍 Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写的工具和控件库。它利用DOM脚本,DHTML和AJAX来构造具有丰富交互...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

pig的基本操作(对hadoop文件)

pig是什么? 我的理解是: pig就相当于 shell , hadoop就相当于linux (所以我尽可能的会使用pig操作hadoop的文件) 1.进入HADOOP_HOME目录。 2.执行sh bin/hadoop 我们可以看到更多命令的说明...

片刻 ⋅ 2015/10/26 ⋅ 0

使用enum建立简单的状态机

Overview The enum in Java is more powerful than many other languages which can lead to surprising uses. In this article, I outline some the individual features of enum in Java, ......

aijfanta ⋅ 2016/12/28 ⋅ 0

Java客户端利用httpclient来同时上传文件和其他字符串参数

1.客户端代码如下: import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.nio.charset.Charset;import java.util.ArrayList; import ......

刘付kin ⋅ 2016/12/07 ⋅ 0

Hibernate 5.2.2 发布

Hibernate 5.2.2 发布了,Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提...

淡漠悠然 ⋅ 2016/08/04 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 9分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 12分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 13分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 15分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 23分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 51分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部