net.sourceforge.jweb.util.XMLUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jweb-common Show documentation
Show all versions of jweb-common Show documentation
本项目主要弥补在使用mybatis3+springmvc+jquery easyui快速搭建web应用系统是遇到的框架不足.
主要工作包括:
1,扩展了ApplicationContextAware,通过单例注入spring容器,提供spring容器外的bean获取方法
2,扩展了apache shiro框架,统一了安全结构
3,扩展了mybatis3拦截器,在两个拦截器中自动完成分页注入,实现内存分页。
4,分页设计数据库方言
5,提供了一个easyuigrid的模型
6,提供了java泛型的jstl
7, xml工具包等一些小工具
The newest version!
package net.sourceforge.jweb.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class XMLUtil {
private static DocumentBuilderFactory factory = null;
private static DocumentBuilder builder = null;
private static TransformerFactory tff;//
private static ErrorHandler handler = null;
private static XPathFactory xPathFactory;
private static XPath xPath;
static {
try {
factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
builder = factory.newDocumentBuilder();
tff = TransformerFactory.newInstance();
builder.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
ByteArrayInputStream byteStream = new ByteArrayInputStream(
"".getBytes());
return new InputSource(byteStream);
}
});
handler = new ErrorHandler() {
public void warning(SAXParseException e) throws SAXException {
}
public void fatalError(SAXParseException e) throws SAXException {
}
public void error(SAXParseException e) throws SAXException {
}
};
builder.setErrorHandler(handler);
xPathFactory = XPathFactory.newInstance();
xPath = xPathFactory.newXPath();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
private static final Object lock = new Object();
public static void call() {
}
// 私有化默认构造函数防止用户创建实例
private XMLUtil() {
}
public static Document newDocument() {
// handler.clear();
synchronized (lock) {
return builder.newDocument();
}
}
/**
* 从文件建立一个Document的实例
*
* @param file
* xml文件实例
* @return Document实例
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
* @throws Exception
* 可能是IO,SAX相关例外
*/
public static Document createDocument(File file) throws Exception {
// handler.clear();
synchronized (lock) {
return builder.parse(file);
}
}
/**
* 从文件建立一个Document的实例
*
* @param file
* xml文件实例
* @return Document实例
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
* @throws Exception
* 可能是IO,SAX相关例外
*/
public static Document createDocument(Reader reader) throws Exception {
// handler.clear();
synchronized (lock) {
return builder.parse(new InputSource(reader));
}
}
/**
* 从一个输入流创建Document的实例
*
* @param inputStream
* xml输入流实例
* @return Document实例
* @throws Exception
* 可能是IO,SAX相关例外
*/
public static Document createDocument(InputStream inputStream) throws Exception {
// handler.clear();
synchronized (lock) {
return builder.parse(inputStream);
}
}
/**
* 从远程url读取文件创建Document实例
*
* @param uri
* 远程uri字符串
* @return Document实例
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
public static Document createDocument(String uri) throws Exception {
// handler.clear();
URL url = new URL(uri);
synchronized (lock) {
return builder.parse(url.openStream());
}
}
public static Document createDocument(URL url) throws Exception {
// handler.clear();
synchronized (lock) {
return builder.parse(url.openStream());
}
}
/**
* 读取Docuement实例中的根
*
* @param doc
* Document的实例
* @return Element的实例即树根
*/
public static Element readRoot(Document document) {
return document.getDocumentElement();
}
/**
* 在element类的元素中,文本本身也是结点,在很多时候知道节点结构是text ,需要读取文本,提供此方法.
* 读取一个指定的元素的文本结点 注意:只能在一个元素的数据类型是 #PCDATA才能使用此方法
*
* @param element
* 指定名称的元素实例
* @return String的文本信息
* 如果元素为空将返回个空串类似 getContentText
*/
public static String readText(Node element) {
if (element == null)
return "";
else
return element.getTextContent();
}
/**
* 在element类的元素中,文本本身也是结点,在很多时候知道节点结构是text ,需要读取文本,提供此方法.
* 读取一个指定的元素的剔除了空格的文本结点
*
* @param element
* 指定名称的元素实例
* @return String的文本信息
*/
public static String readTrimedText(Node element) {
if (element == null)
return "";
else
return element.getTextContent().trim();
}
/**
* 读取一个指定的元素的指定名称的属性结点的属性值 如果没有指定名称的结点时,将返回null.
*
* @param element
* 指定的元素的实例
* @param name
* 属性结点的名称
* @return 属性值的String文本
*/
public static String readAttribute(Node element, String attributeName) {
if (element == null)
return null;
NamedNodeMap attributes = element.getAttributes();
if (attributes == null)
return null;
Node value = attributes.getNamedItem(attributeName);
if (value == null)
return null;
return value.getTextContent();
}
/**
* 返回指定的元素的指定名称的第一个子结点的实例 对于一个父元素下只有一个某种名称的的子元素 也可以使用此方法 如果元素没有子结点,将返回null
*
* @param parent
* 父结点实例
* @param name
* 指定的结点的名称
* @return 指定名称的第一个结点实例
*/
public static Element readFirstChild(Node parentNode, String nodeName) {
if (parentNode != null) {
NodeList children = parentNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeName().equals(nodeName))
return (Element) children.item(i);
}
}
return null;
}
/**
* 返回指定的元素的指定名称的子元素的列表 如果每一偶返回一个长度为0的列表
*
* @param parentNode
* 父结点实例
* @param nodeName
* 指定的结点的名称
* @return 元素的列表(ArrayList)
*/
public static List readChildren(Node parentNode, String nodeName) {
ArrayList ret = new ArrayList();
NodeList children = parentNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeName().equals(nodeName))
ret.add((Element) children.item(i));
}
return ret;
}
/**
* 返回指定的元素的所有的子元素的列表 如果每一偶返回一个长度为0的列表
*
* @param parentNode
* 父结点实例
* @return 元素的列表(ArrayList)
*/
public static List readChildren(Node parentNode) {
ArrayList ret = new ArrayList();
NodeList children = parentNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i) instanceof Element)
ret.add((Element) children.item(i));
}
return ret;
}
public static void transfer(Document doc, String filepath) {
try {
Transformer tf = tff.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(filepath);
tf.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static void transfor(Document doc, OutputStream out) {
try {
Transformer tf = tff.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(out);
tf.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static XPathExpression compile(String expression) throws XPathExpressionException {
return xPath.compile(expression);
}
}