public class XMLUtil {
public static Logger log = Logger.getLogger(XMLUtil.class);
/**
* 创建xml文件
* @param doc xml对象
* @param fileName 创建文件的路径
* @param encoding 文件的字符串编码方式
*/
public static void createXMLFile(Document doc,String fileName,String encoding){
XMLWriter writer = null;
try{
if(!StringUtil.isEmpty(encoding)){
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(encoding);
writer = new XMLWriter(new FileWriter(fileName), format);
}else{
writer = new XMLWriter(new FileWriter(fileName));
}
}catch(IOException e){
return;
}finally{
try{
if(writer != null)
writer.close();
}catch(IOException e){
return;
}
}
}
/**
* 创建一个document并将根节点加入其中
* @param rootLabel 根节点的label名字
* @return 一个拥有根节点的空Document对象
*/
public static Document createDocument(String rootLabel){
Document doc = DocumentHelper.createDocument();
doc.setRootElement(doc.addElement(rootLabel));
return doc;
}
/**
* 将字符串转化为Document类对象
* @param xmlString xml格式的字符串
* @return 一个document对象
*/
public static Document convertStringToXml(String xmlString){
if(StringUtil.isEmpty(xmlString)){
xmlString = "<root></root>";
}
Document document = null;
try{
document = DocumentHelper.parseText(xmlString);
}catch(DocumentException e){
}
return document;
}
/**
* 给节点添加子节点
* @param parentNode 父节点
* @param nodeLabel 子节点label名
* @param nodeId 子节点id
* @param elements 需要往子节点中添加的子元素label和value对
*/
@SuppressWarnings("unchecked")
public static void addNode(Element parentNode,String nodeLabel,String nodeId,Map elements){
Element newNode = parentNode.addElement(nodeLabel);
newNode.addAttribute("id", nodeId);
Iterator it = elements.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
newNode.addElement((String)key).setText((String)value);
}
}
/**
* 给节点添加子节点
* @param parentNode 父节点
* @param nodeLabel 子节点label名
* @param nodeId 子节点id
* @param elements 需要往子节点中添加的属性label和value对
*/
@SuppressWarnings("unchecked")
public static void addNodeWithAttribute(Element parentNode,String nodeLabel,String nodeId,Map elements){
Element newNode = parentNode.addElement(nodeLabel);
newNode.addAttribute("id", nodeId);
Iterator it = elements.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
newNode.addAttribute((String)key,(String)value);
}
newNode.setText("");
}
/**
* 从文件中读取xml,转化为字符串
* @param filePath 文件路径
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(String filePath){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 从文件中读取xml,转化为字符串
* @param file 包含xml数据的文件
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(File file){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(file);
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 从流中读取xml,转化为字符串
* @param input 包含xml信息的流
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(InputStream input){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(input);
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 以xpath的方式查找节点
* @param filePath 文件路径
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(String filePath,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param input xml文件流
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(InputStream input,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(input);
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param file xml文件
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(File file,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(file);
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param doc xml文档对象
* @param xpath xpath路径
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List<Element> getElementsByXPath(Document doc,String xpath){
List<Element> properties = null;
try{
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 创建文档的Document对象
* @param file 文件对象
* @return Document对象
*/
public static Document getXmlDocment(File file){
if(file == null)
return null;
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(file);
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param filePath 文件所在的路径
* @return Document对象
*/
public static Document getXmlDocment(String filePath){
if(StringUtil.isEmpty(filePath)){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param input 文档流
* @return Document对象
*/
public static Document getXmlDocment(InputStream input){
if(input == null){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(new InputStreamReader(input,"utf-8"));
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param input 文档流
* @return Document对象
*/
public static Document getXmlDocment(InputStream input,String charset){
if(input == null){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
if(charset == null || charset.equals("")){
charset = "utf-8";
}
doc = reader.read(new InputStreamReader(input,charset));
}catch(Exception e){
return null;
}
return doc;
}
}
public static Logger log = Logger.getLogger(XMLUtil.class);
/**
* 创建xml文件
* @param doc xml对象
* @param fileName 创建文件的路径
* @param encoding 文件的字符串编码方式
*/
public static void createXMLFile(Document doc,String fileName,String encoding){
XMLWriter writer = null;
try{
if(!StringUtil.isEmpty(encoding)){
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(encoding);
writer = new XMLWriter(new FileWriter(fileName), format);
}else{
writer = new XMLWriter(new FileWriter(fileName));
}
}catch(IOException e){
return;
}finally{
try{
if(writer != null)
writer.close();
}catch(IOException e){
return;
}
}
}
/**
* 创建一个document并将根节点加入其中
* @param rootLabel 根节点的label名字
* @return 一个拥有根节点的空Document对象
*/
public static Document createDocument(String rootLabel){
Document doc = DocumentHelper.createDocument();
doc.setRootElement(doc.addElement(rootLabel));
return doc;
}
/**
* 将字符串转化为Document类对象
* @param xmlString xml格式的字符串
* @return 一个document对象
*/
public static Document convertStringToXml(String xmlString){
if(StringUtil.isEmpty(xmlString)){
xmlString = "<root></root>";
}
Document document = null;
try{
document = DocumentHelper.parseText(xmlString);
}catch(DocumentException e){
}
return document;
}
/**
* 给节点添加子节点
* @param parentNode 父节点
* @param nodeLabel 子节点label名
* @param nodeId 子节点id
* @param elements 需要往子节点中添加的子元素label和value对
*/
@SuppressWarnings("unchecked")
public static void addNode(Element parentNode,String nodeLabel,String nodeId,Map elements){
Element newNode = parentNode.addElement(nodeLabel);
newNode.addAttribute("id", nodeId);
Iterator it = elements.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
newNode.addElement((String)key).setText((String)value);
}
}
/**
* 给节点添加子节点
* @param parentNode 父节点
* @param nodeLabel 子节点label名
* @param nodeId 子节点id
* @param elements 需要往子节点中添加的属性label和value对
*/
@SuppressWarnings("unchecked")
public static void addNodeWithAttribute(Element parentNode,String nodeLabel,String nodeId,Map elements){
Element newNode = parentNode.addElement(nodeLabel);
newNode.addAttribute("id", nodeId);
Iterator it = elements.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
newNode.addAttribute((String)key,(String)value);
}
newNode.setText("");
}
/**
* 从文件中读取xml,转化为字符串
* @param filePath 文件路径
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(String filePath){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 从文件中读取xml,转化为字符串
* @param file 包含xml数据的文件
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(File file){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(file);
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 从流中读取xml,转化为字符串
* @param input 包含xml信息的流
* @return 转化好的xml格式字符串
*/
public static String readXmlAsString(InputStream input){
SAXReader reader = new SAXReader();
Document document = null;
try{
document = reader.read(input);
}catch(DocumentException e){
return "";
}
return document.asXML();
}
/**
* 以xpath的方式查找节点
* @param filePath 文件路径
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(String filePath,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param input xml文件流
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(InputStream input,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(input);
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param file xml文件
* @param xpath xpath值
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List getElementsByXPath(File file,String xpath){
SAXReader reader = new SAXReader();
List<Element> properties = null;
try{
Document doc = reader.read(file);
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 以xpath的方式查找节点
* @param doc xml文档对象
* @param xpath xpath路径
* @return 符合条件的节点列表
*/
@SuppressWarnings("unchecked")
public static List<Element> getElementsByXPath(Document doc,String xpath){
List<Element> properties = null;
try{
properties=doc.selectNodes(xpath);
}catch(Exception e){
return null;
}
return properties;
}
/**
* 创建文档的Document对象
* @param file 文件对象
* @return Document对象
*/
public static Document getXmlDocment(File file){
if(file == null)
return null;
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(file);
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param filePath 文件所在的路径
* @return Document对象
*/
public static Document getXmlDocment(String filePath){
if(StringUtil.isEmpty(filePath)){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(XMLUtil.class.getClassLoader().getResourceAsStream(filePath));
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param input 文档流
* @return Document对象
*/
public static Document getXmlDocment(InputStream input){
if(input == null){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
doc = reader.read(new InputStreamReader(input,"utf-8"));
}catch(Exception e){
return null;
}
return doc;
}
/**
* 创建文档的Document对象
* @param input 文档流
* @return Document对象
*/
public static Document getXmlDocment(InputStream input,String charset){
if(input == null){
return null;
}
SAXReader reader = new SAXReader();
Document doc = null;
try{
if(charset == null || charset.equals("")){
charset = "utf-8";
}
doc = reader.read(new InputStreamReader(input,charset));
}catch(Exception e){
return null;
}
return doc;
}
}