文档章节

XML Utility

markGao
 markGao
发布于 2013/12/31 11:38
字数 830
阅读 26
收藏 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
博文 187
码字总数 91352
作品 0
宝山
程序员
Jenkins中使用Git和Maven之多个项目

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

长平狐
2012/08/28
723
0
四种Sandcastle方法生成帮助类帮助文档

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

安与生_
2017/10/18
0
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
449
0
在Eclipse下 Ant打包报错

这个是build.xml源文件

時間會抹平那些皺褶遺
2015/08/11
832
1
pig的基本操作(对hadoop文件)

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

片刻
2015/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS三元运算示例

1. topFlag=topFlag ==0?1:0; 等于 if(topFlag=00){ topFlag=1; }else if(topFlag == 1){ topFlag=0; } 2. 5>3?alert('5大'):alert('3大'); 即 if(5>3){alert('5大')}else{alert('3大')}; 注......

森火
今天
0
0
利用Slf4j的MDC跟踪方法调用链

why? 一个web项目通常提供很多URL访问地址, 项目一般都是分层处理,例如Controller——>Service——>DAO。 如果想根据日志查看用户一次请求都走了哪些方法(多数是查错误)。 如果系统是多人...

杨春炼
今天
6
0
Maven介绍及安装

Maven介绍及安装 以下内容是本人早期学习时的笔记,可能比较详实繁琐,现在复习一下Maven,顺便将内容抛出来,供大家一起学习进步。 一、Maven简介 Maven是Apache旗下的一款项目管理工具,是...

星汉
今天
0
0
小程序Aes解密

主要步骤: 1、下载AES源码(JS版) 2、在小程序中新建一个公共的文件夹,把AES源码拷贝进去(注意:需要暴露接口 module.exports = CryptoJS;) 3、添加一个用于加密解密的公共JS,可取名为...

Mr_Tea伯奕
今天
0
0
Go实现文件传输(基本传输可用)

发送端 package mainimport ("fmt""os""net""io")func SendFile(path string, connect net.Conn){file, oerr :=os.Open(path)if oerr !=nil{fmt.Println("Open", oerr)......

CHONGCHEN
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部