- 浏览: 1064869 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
/*
* XmlHandle.java
* Created on 2005-1-14
* Copyright (c) jobcn.com. All rights reserved.
*/
package com.util;
import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.HTMLWriter;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 处理 XML 的工具. <p/>
*
* <pre>
* 这个工具类是用于处理 XML . XML 的数据格式应该如下:
* <?xml version="1.0" encoding="gbk"?>
* <root>
* <field id="int" name="string" email="string" comment="text" />
* <documentAttribute maxIid="2" />
* <row id="1" name="jacky" email="jacky@domain.com" comment="文本"/>
* <row id="2" name="lily" email="lily@domain.com">
* <comment>
* <![CDATA[文本1 文本2]]>
* </comment>
* </row>
* </root>
* </pre>
*
* <br/>
*
* @author Loist Loh
* @version 1.0
*/
public class XmlHandle
{
private static XmlHandle instance = new XmlHandle();
/**
* 构造函数
*/
public XmlHandle()
{
}
/**
* 程序入口.
*
* @param args
*/
public static void main(String[] args)
{
XmlHandle xmlHandle = new XmlHandle();
try
{
// URL url = new URL("file", null, System.getProperty("user.dir") + File.separator + "xml/test.xml");
Document document = null;
document = xmlHandle.getXmlFromFile("conf/a.xml");
String str = xmlHandle.getUniqueNodeDataFromXml(document,"/conf/action/im/mail","mail_host");
boolean flag = xmlHandle.setSingleXmlData(document, "/conf/action/im/mail", "mail_host", "192.168.60.131", false);
// xmlHandle.saveXmlToFile("conf/a.xml", document);
System.out.println(str);
System.out.println("程序结束!");
} catch (Exception e)
{
System.out.println(e.getMessage());
}
}
/*<conf>
* <action class="backupsubsystem.cticlient.Jobcn_Cti_SnapShot_TelLog2"></action>
<action class="backupsubsystem.testclient.Test" ></action>
<action class="backupsubsystem.openfire.OpenFire_Admin"></action>
*</conf>
* 获取指定节点某个属性的值,返回的是一个LIST,例如:document = xmlHandle.getXmlFromFile("conf\\alarm-config.xml");
List<String> list = xmlHandle.getDataFromXml(document, "/conf",
"action","class");
*获取conf/action 节点属性为class的所有值
*返回:一个包含backupsubsystem.cticlient.Jobcn_Cti_SnapShot_TelLog2,backupsubsystem.testclient.Test,backupsubsystem.openfire.OpenFire_Admin的List
*/
public List<String> getDataFromXml(Document document,String strCondition,String key,String attribute)
{
List<String> list = new ArrayList<String>();
Node root = document.selectSingleNode(strCondition);
if (root != null)
{
List nodeslist = root.selectNodes(key);
for(Object o:nodeslist){
Element e = (Element) o;
String className=e.attributeValue(attribute);
list.add(className);
}
}
return list;
}
/*<conf>
* <action class="backupsubsystem.cticlient.Jobcn_Cti_SnapShot_TelLog2">
<mail_host>192.168.60.131</mail_host>
<mail_user>JCNEP3160</mail_user>
<mail_pwd>820815</mail_pwd>
<mail_from>tuping@jobcn.com</mail_from>
<mail_to>tuping@jobcn.com</mail_to>
</action>
* </conf>
* 获取单个节点的值,例如:String str = xmlHandle.getUniqueNodeDataFromXml(document,"/conf/action","mail_to");
* 就是去取/conf/action 下面的mail_to节点的值
*
* 返回tuping@jobcn.com
*/
public String getUniqueNodeDataFromXml(Document document,String strCondition,String key)
{
String nodeText = "";
Node root = document.selectSingleNode(strCondition);
if (root != null)
{
List nodeslist = root.selectNodes(key);
if(nodeslist.size()!=1)
{
nodeText="";
}
else
{
nodeText = ((Element)nodeslist.get(0)).getText();
}
}
return nodeText;
}
public List<String> getUniqueNodeDataFromXml2(Document document,String strCondition,String key)
{
List<String> list = new ArrayList<String>();
Node root = document.selectSingleNode(strCondition);
if (root != null)
{
List nodeslist = root.selectNodes(key);
if(nodeslist.size()>1)
{
}
for(Object o:nodeslist){
Element e = (Element) o;
//String className=e.attributeValue("class");
list.add(e.getText());
}
}
return list;
}
/**
* 获得一个本类的单一实例. com.jobcn.util.XmlHandle = XmlHandle.getInstance();
*
* @return com.jobcn.util.XmlHandle
*/
public static XmlHandle getInstance()
{
return instance;
// return new XmlHandle();
}
/**
* 从本地磁盘读取一个 xml 文件, 返回一个 Document, 如果返回结果为 null 表示读取失败.
*
* @param strFilePath
* 文件的路径. 可以是相对路径也可以是绝对路径.
* @return document
*/
public Document getXmlFromFile(String strFilePath)
{
Document theResult = null;
theResult = getXmlFromFile(new File(strFilePath));
return theResult;
}
public Document getXmlFromFile(File file)
{
Document theResult = null;
try
{
SAXReader reader = new SAXReader();
Document document = reader.read(file);
theResult = document;
} catch (Exception e)
{
e.printStackTrace();
System.out.println(file.getAbsolutePath() + "文件读取出错!");
}
return theResult;
}
/**
* 从URL读取一个 xml 文件, 返回一个 Document, 如果返回结果为 null 表示读取失败.
*
* @param url
* xml 文件的 java.net.URL 的实例.
* @return document
*/
public Document getXmlFromUrl(URL url)
{
Document theResult = null;
try
{
SAXReader reader = new SAXReader();
Document document = reader.read(url.openStream());
theResult = document;
} catch (Exception e)
{
}
return theResult;
}
/**
* 用于保存 document 到 xml 格式的文本文件. 返回结果若为 true 表示文件保存成功, 否则失败. xml 的字符编码为 gbk
*
* @param strFilePath
* 保存路径.
* @param document
* 要保存的XML文档
* @return boolean 执行结果, true 为成功;false 为失败.
*/
public boolean saveXmlToFile(String strFilePath, Document document)
{
boolean theResult = false;
try
{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gbk");
XMLWriter writer = new XMLWriter(new FileWriter(strFilePath), format);
writer.write(document);
writer.flush();
writer.close();
theResult = true;
} catch (Exception e)
{
theResult = false;
}
return theResult;
}
/**
* 用于在本地磁盘上创建一个简单的 xml 格式的文本文件.
*
* @param strFilePath
* XML 文件的路径.
* @return boolean true 为创建成功; false 为创建失败.
*/
public boolean createXmlFile(String strFilePath)
{
boolean theResult = false;
try
{
Document document = this.createNewSimpleDocument();
if (this.saveXmlToFile(strFilePath, document))
{
theResult = true;
} else
{
theResult = false;
}
} catch (Exception e)
{
e.printStackTrace();
}
return theResult;
}
/**
* 删除本地磁盘上的一个 xml 文件.
*
* @param strFilePath
* 文件路径
* @return boolean true 为成功; false 为失败.
*/
public boolean deleteXmlFile(String strFilePath)
{
boolean theResult = false;
try
{
if (strFilePath.matches(".+\\.xml") == true)
{
File file = new File(strFilePath);
file.delete();
}
theResult = true;
} catch (Exception e)
{
theResult = false;
}
return theResult;
}
/**
* 创建一个新的 document. XML编码是GBK
*
* @return document XML 文档
*/
public Document createNewDocument()
{
Document theResult = null;
// Document document = DocumentHelper.createDocument();
Document document = this.convertStringToDocument("<?xml version=\"1.0\" encoding=\"gbk\"?><root></root>");
// Element root = document.addElement("root");
Element root = document.getRootElement();
// (root.addElement("row")).addAttribute("id", "1");
(root.addElement("documentAttribute")).addAttribute("maxId", "0");
(root.addElement("field")).addAttribute("id", "int");
theResult = document;
return theResult;
}
/**
* 创建一个新的, 最简单的 document. XML编码是GBK
*
* @return document XML 文档
*/
public Document createNewSimpleDocument()
{
Document theResult = null;
Document document = this.convertStringToDocument("<?xml version=\"1.0\" encoding=\"gbk\"?><root></root>");
theResult = document;
return theResult;
}
/**
* 将 xml 通过 xslt 转换成 xhtml .
*
* @param document
* 要转换的文档
* @param stylesheetUrl
* 样式文件所在的位置
* @return String 转换好的xhtml.
* @exception Exception
* 转换失败将抛出 Exception 异常.
*/
public String transformToHtml(Document document, URL stylesheetUrl) throws Exception
{
String theResult = "";
try
{
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(stylesheetUrl.openStream()));
DocumentSource source = new DocumentSource(document);
DocumentResult result = new DocumentResult();
transformer.transform(source, result);
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();//.createCompactFormat();
// format.setXHTML(true);
format.setExpandEmptyElements(true);
HTMLWriter writer = new HTMLWriter(sw, format);
writer.write(result.getDocument());
writer.flush();
theResult = sw.toString();
} catch (Exception e)
{
theResult = e.getMessage();
e.printStackTrace();
throw e;
}
return theResult;
}
/**
* 将 xml 通过 xslt 转换成 xhtml .
*
* @param document
* 要转换的文档
* @param stylesheetFilePath
* 样式文件所在的位置, 相对路径和绝对路径均可.
* @return String 转换好的xhtml.
* @exception Exception
* 转换失败将抛出 Exception 异常.
*/
public String transformToHtml(Document document, String stylesheetFilePath) throws Exception
{
String theResult = "";
try
{
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(stylesheetFilePath));
DocumentSource source = new DocumentSource(document);
DocumentResult result = new DocumentResult();
transformer.transform(source, result);
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();//.createCompactFormat();
format.setExpandEmptyElements(true);
// format.setXHTML(true);
HTMLWriter writer = new HTMLWriter(sw, format);
writer.write(result.getDocument());
writer.flush();
theResult = sw.toString();
} catch (Exception e)
{
theResult = e.getMessage();
e.printStackTrace();
throw e;
}
return theResult;
}
public String transformToHtml(Document document, Reader reader) throws Exception
{
String theResult = "";
try
{
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(reader));
DocumentSource source = new DocumentSource(document);
DocumentResult result = new DocumentResult();
transformer.transform(source, result);
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();//.createCompactFormat();
format.setExpandEmptyElements(true);
// format.setXHTML(true);
HTMLWriter writer = new HTMLWriter(sw, format);
writer.write(result.getDocument());
writer.flush();
theResult = sw.toString();
} catch (Exception e)
{
theResult = e.getMessage();
e.printStackTrace();
throw e;
}
return theResult;
}
/**
* 将 document 转换为字符串.
*
* @param document
* 要转换的文档
* @param encoding
* XML 的编码. gb2312, gbk, gb18030, utf-8 等.
* @return String XML 格式的文本.
*/
public String convertDocumentToString(Document document, String encoding)
{
String theResult = null;
if (encoding == null || encoding.equals("")) encoding = "gbk";
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setExpandEmptyElements(true);
format.setEncoding(encoding);
XMLWriter writer = new XMLWriter(sw, format);
try
{
writer.write(document);
writer.flush();
} catch (Exception e)
{
}
theResult = sw.toString();
return theResult;
}
/**
* 将字符串转换为 document.
*
* @param strXml
* XML 格式的文本.
* @return Document 失败将返回null.
*/
public Document convertStringToDocument(String strXml)
{
Document theResult = null;
try
{
theResult = DocumentHelper.parseText(strXml);
} catch (Exception e)
{
}
return theResult;
}
/**
* 从 document 中提取全部row节点的数据.
*
* @param document
* 要进行提取的文档.
* @return LinkedList 数据保存到一个链接列表.
*/
public LinkedList getAllXmlRowDataToLinkedList(Document document)
{
LinkedList theResult = new LinkedList();
theResult = getAllXmlDataToLinkedList(document, "//row");
return theResult;
}
/**
* 从 document 中提取全部符合条件的数据.
*
* @param document
* 要进行提取的文档.
* @param strCondition
* 条件. 比如 "//row" 将提取全部row节点的数据.
* @return LinkedList 数据保存到一个链接列表.
*/
public LinkedList getAllXmlDataToLinkedList(Document document, String strCondition)
{
LinkedList<HashMap> theResult = new LinkedList<HashMap>();
// 提取所有符合条件数据
List list_row = document.selectNodes(strCondition);
Iterator iterator_row = list_row.iterator();
for (int index_row = 1; iterator_row.hasNext(); index_row++)
{
Element element = (Element) iterator_row.next();
HashMap<String, String> theHashMap = new HashMap<String, String>();
theHashMap.put("", element.getText());
for (Iterator i = element.attributeIterator(); i.hasNext();)
{
Attribute attribute = (Attribute) i.next();
theHashMap.put(attribute.getName(), attribute.getValue());
}
for (Iterator i = element.elementIterator(); i.hasNext();)
{
try
{
Element element2 = (Element) i.next();
theHashMap.put(element2.getName(), element2.getText());
} catch (Exception e)
{
e.printStackTrace();
}
}
theResult.addLast(theHashMap);
}
return theResult;
}
/**
* 提取比较简单的数据. 提取特定元素下的一个属性值或节点值.
*
* @param document
* 要提取的文档.
* @param strCondition
* 选择条件. 如"//row[@name='jacky']".
* @param key
* 属性名或子元素名. null 或 空字符串表示直接取该元素下的值.
* @return String 如果失败将返回空字符串.
*/
public String getSingleXmlData(Document document, String strCondition, String key)
{
String theResult = "";
Element element = (Element) document.selectSingleNode(strCondition);
if (element != null)
{
if (key == null || key.equals(""))
{
theResult = element.getText();
} else
{
theResult = element.attributeValue(key);
if (theResult == null || theResult.equals(""))
{
Element element_temp = (Element) element.selectSingleNode("./" + key);
if (element_temp != null)
{
theResult = element_temp.getText();
}
}
}
}
if (theResult == null) theResult = "";
return theResult;
}
/**
* 根据 row 元素的 id 提取一个row元素的数据. 提取row元素下的一个属性值或节点值.
*
* @param document
* 要提取的文档.
* @param rowId
* row 的属性 id 值.
* @param key
* 属性名或节点名.
* @return String 如果失败将返回空字符串.
*/
public String getSingleXmlRowDataById(Document document, int rowId, String key)
{
String theResult = "";
theResult = this.getSingleXmlData(document, "//row[@id=" + rowId + "]", key);
return theResult;
}
/**
* 取得xml中field的各属性的值.
*
* @param document
* 要提取的文档.
* @return HashMap 失败将返回null.
*/
public HashMap getXmlFieldAttribute(Document document)
{
HashMap theResult = null;
Element element_field = (Element) document.selectSingleNode("//field");
String[] fieldNameArray = new String[element_field.attributeCount()];
if (element_field != null)
{
HashMap<String, Object> hashMap_field = new HashMap<String, Object>();
int index = 0;
for (Iterator i = element_field.attributeIterator(); i.hasNext();)
{
Attribute attribute = (Attribute) i.next();
fieldNameArray[index++] = attribute.getName();
hashMap_field.put(attribute.getName(), attribute.getValue());
}
hashMap_field.put("fieldNameArray", fieldNameArray);
theResult = hashMap_field;
}
return theResult;
}
/**
* 设置单一节点的值. 如果key不存在就会自动创建.
*
* @param document
* 要设置的文档.
* @param strCondition
* 条件.
* @param key
* 属性或节点名. key 为 null 或 空字符串时 value 会直接保存到元素下.
* @param value
* 要设置的值.
* @param isAttribute
* true 将保存为属性形式; false 将保存为节点形式.
* @return true 为成功; false 为失败.
*/
public boolean setSingleXmlData(Document document, String strCondition, String key, String value, boolean isAttribute)
{
boolean theResult = false;
Element element = (Element) document.selectSingleNode(strCondition);
if (element != null)
{
if (key == null || key.equals(""))
{
element.clearContent();
element.addCDATA(value);
} else if (isAttribute)
{
element.addAttribute(key, value);
} else
{
Attribute attribute_remove = element.attribute(key);
if (attribute_remove != null) element.remove(attribute_remove); // 删除以属性方式保存的值
Element element_temp = (Element) element.selectSingleNode("./" + key);
if (element_temp == null)
{
element.addElement(key).addCDATA(value);
} else
{
element_temp.clearContent();
element_temp.addCDATA(value);
}
}
theResult = true;
}
return theResult;
}
/**
* 设置单一row节点的值. 如果key不存在就会自动创建.
*
* @param document
* 要设置的文档.
* @param rowId
* row 的 id.
* @param key
* 属性或节点名.
* @param value
* 要设置的值.
* @param isAttribute
* true 将保存为属性形式; false 将保存为节点形式.
* @return true 为成功; false 为失败.
*/
public boolean setSingleXmlRowDataById(Document document, int rowId, String key, String value, boolean isAttribute)
{
boolean theResult = false;
theResult = setSingleXmlData(document, "//row[@id=" + rowId + "]", key, value, isAttribute);
return theResult;
}
/**
* 得到row的记录数.
*
* @param document
* 要进行统计的文档.
* @return row 的记录数.
*/
public int getXmlRowCount(Document document)
{
int theResult = 0;
theResult = getXmlElementCount(document, "//row");
return theResult;
}
/**
* 得到条件下元素的个数.
*
* @param document
* 要进行统计的文档.
* @return 记录数.
*/
public int getXmlElementCount(Document document, String strCondition)
{
int theResult = 0;
theResult = document.selectNodes(strCondition).size();
return theResult;
}
/**
* 新建 row 节点,id 自动分配.
*
* @param document
* 要新建节点的文档.
* @return 新建节点的 id 号.
*/
public int createSingleRow(Document document)
{
int theResult = 0;
int newId = 0;
Element element_new = document.getRootElement().addElement("row");
Element element_documentAttribute = (Element) document.selectSingleNode("//documentAttribute");
if (element_documentAttribute != null)
{
int maxId = Integer.parseInt(element_documentAttribute.attributeValue("maxId"));
newId = maxId + 1;
element_new.addAttribute("id", String.valueOf(newId));
element_documentAttribute.addAttribute("maxId", String.valueOf(newId));
theResult = newId;
} else
{
theResult = -1;
}
return theResult;
}
/**
* 新建 root 下的一个节点.
*
* @param document
* 要新建的文档.
* @param elementName
* 节点名.
* @return true 为成功; false 为失败.
*/
public boolean createSingleElement(Document document, String elementName)
{
boolean theResult = false;
try
{
Element element_new = document.getRootElement().addElement(elementName);
theResult = true;
} catch (Exception e)
{
System.out.println(e);
}
return theResult;
}
/**
* 建新节点, 并初始化一些属性.
*
* @param document
* 要新建节点的文档.
* @param elementName
* 节点名.
* @param attributeName
* 属性名.
* @param attributeValue
* 属性值.
* @return true 为成功; false 为失败.
*/
public boolean createSingleElementWithAttribute(Document document, String elementName, String attributeName, String attributeValue)
{
boolean theResult = false;
try
{
Element element_new = document.getRootElement().addElement(elementName);
element_new.addAttribute(attributeName, attributeValue);
theResult = true;
} catch (Exception e)
{
System.out.println(e);
}
return theResult;
}
public boolean createSingleElementWithText(Document document, String elementName, String text)
{
boolean theResult = false;
try
{
Element element_new = document.getRootElement().addElement(elementName);
element_new.addText(text);
theResult = true;
} catch (Exception e)
{
System.out.println(e);
}
return theResult;
}
/**
* 根据 row id 删除一个row节点.
*
* @param document
* 要操作的文档.
* @param id
* row id.
* @return true 为成功; false 为失败.
*/
public boolean removeSingleRowById(Document document, int id)
{
boolean theResult = false;
theResult = this.removeSingleElement(document, "//row[@id=" + id + "]");
return theResult;
}
/**
* 根据条件删除一个节点.
*
* @param document
* 要操作的文档.
* @param strCondition
* 条件.
* @return true 为成功; false 为失败.
*/
public boolean removeSingleElement(Document document, String strCondition)
{
boolean theResult = false;
Node node = document.selectSingleNode(strCondition);
if (node != null)
{
document.getRootElement().remove(node);
theResult = true;
}
return theResult;
}
/**
* 判断元素是否存在.
*
* @param document
* 要操作的文档.
* @param strCondition
* 条件.
* @return true 为存在; false 为不存在.
*/
public boolean existNode(Document document, String strCondition)
{
boolean theResult = false;
Node node = document.selectSingleNode(strCondition);
if (node != null)
{
theResult = true;
}
return theResult;
}
/**
* 将数据库里的记录集转换成xml文档.
*
* @param rs
* 记录集.
* @param currentPage
* 当然页.
* @param pageSize
* 每页的大小.
* @return Document 文档.
*/
public Document getXmlFromResultSet(ResultSet rs, int currentPage, int pageSize)
{
StringBuffer strXml = new StringBuffer();
strXml.append("<?xml version=\"1.0\" encoding=\"gbk\"?><root>");
ResultSetMetaData rsmd = null;
int columnCount = 0;
try
{
rsmd = rs.getMetaData();
columnCount = rsmd.getColumnCount();
boolean absoluteSuccess = false;
// 对 rs 进行分页
try
{
absoluteSuccess = rs.absolute(pageSize * (currentPage - 1) + 1);
} catch (Exception e)
{
e.printStackTrace();
}
String strValue = "";
if (absoluteSuccess)
{
for (int i = 0; i < pageSize; i++)
{
strXml.append("<row rowId=\"" + (i+1) + "\">");
for (int j = 1; j <= columnCount; j++)
{
strValue = "";
try
{
strValue = rs.getString(j);
} catch (Exception e){}
strXml.append("<" + rsmd.getColumnName(j) + ">");
strXml.append("<![CDATA[" + strValue + "]]>");
strXml.append("</" + rsmd.getColumnName(j) + ">");
}
strXml.append("</row>");
if (!rs.next())
{
break;
}
}
}
} catch (SQLException sqle)
{
sqle.printStackTrace();
System.out.println(sqle.getMessage());
} catch (Exception e)
{
System.out.println(e.getMessage());
}
strXml.append("</root>");
return this.convertStringToDocument(strXml.toString());
}
/**
* 将 xml 文档中带有更新标记的记录更新到数据库. 元素内必须包含 dbId 属性. 如: 更新: <row id="1" dbId="1001" name="jacky" email="jacky@domain.com" updateFlag="1" updateOperation="update"/> 插入: <row id="2" dbId="1002"
* name="lucy" email="lucy@domain.com" updateFlag="1" updateOperation="insert"/> 删除: <row id="3" dbId="1003" name="temp" email="temp@domain.com" updateFlag="1" updateOperation="delete"/>
*
* @param document
* 要操作的文档
* @param stmt
* statement
* @param table
* 表名
* @param strFields
* 字段. 格式 field1, field2, ....
* @return true 为成功; false 为失败.
*/
public boolean saveXmlToDataBase(Document document, Statement stmt, String table, String strFields)
{
boolean theResult = false;
HashMap hashMap_field = this.getXmlFieldAttribute(document);
String[] strArrFields = strFields.split("[, ]+");
List list_row = document.selectNodes("//row[@updateFlag=1]");
Iterator iterator_row = list_row.iterator();
for (int index_row = 1; iterator_row.hasNext(); index_row++)
{
Element element = (Element) iterator_row.next();
// 对不同的标记作不同的操作, 操作类型有 insert, update, delete
String updateOperation = element.attributeValue("updateOperation");
String dbId = element.attributeValue("dbId");
String id = element.attributeValue("id");
if (updateOperation != null && !updateOperation.equals(""))
{
// insert 操作
if (updateOperation.equals("insert"))
{
String strCols = strFields.replaceAll("'", "''");
// 构建 insert 语句中 values 的值
String strColValues = "";
for (int i = 0; i < strArrFields.length; i++)
{
String strCurrentField = strArrFields[i];
if (i != 0)
{
strColValues += ",";
}
String strValue = this.getSingleXmlData(document, "//row[@id='" + id + "']", strCurrentField);
// 根据field的不同属性而执行不同的操作
String strCurrentField_attribute = (String) hashMap_field.get(strCurrentField);
if (strCurrentField_attribute != null
&& (strCurrentField_attribute.indexOf("int") > -1 || strCurrentField_attribute.indexOf("float") > -1 || strCurrentField_attribute.indexOf("money") > -1 || strCurrentField_attribute.indexOf("bit") > -1
|| strCurrentField_attribute.indexOf("decimal") > -1 || strCurrentField_attribute.indexOf("real") > -1))
{
if (strValue == null) strColValues += 0;
else strColValues += strValue;
} else
{
if (strValue == null) strColValues += "''";
else strColValues += "'" + strValue.replaceAll("'", "''") + "'";
}
}
try
{
// stmt.execute("insert into " + table + "(" + strCols + ") values(" + strColValues + ")");
stmt.addBatch("insert into " + table + "(" + strCols + ") values(" + strColValues + ")");
theResult = true;
} catch (Exception e)
{
theResult = false;
e.printStackTrace();
}
}
// update 操作
if (updateOperation.equals("update") && dbId != null)
{
String strUpdateSetString = "";
for (int i = 0; i < strArrFields.length; i++)
{
String strCurrentField = strArrFields[i];
if (i != 0)
{
strUpdateSetString += ",";
}
String strValue = this.getSingleXmlData(document, "//row[@id='" + id + "']", strCurrentField);
// 根据field的不同属性而执行不同的操作
String strCurrentField_attribute = (String) hashMap_field.get(strCurrentField);
if (strCurrentField_attribute != null
&& (strCurrentField_attribute.indexOf("int") > -1 || strCurrentField_attribute.indexOf("float") > -1 || strCurrentField_attribute.indexOf("money") > -1 || strCurrentField_attribute.indexOf("bit") > -1
|| strCurrentField_attribute.indexOf("decimal") > -1 || strCurrentField_attribute.indexOf("real") > -1))
{
if (strValue == null) strUpdateSetString += strCurrentField + "=0";
else strUpdateSetString += strCurrentField + "=" + strValue;
} else
{
if (strValue == null) strUpdateSetString += strCurrentField + "=''";
else strUpdateSetString += strCurrentField + "='" + strValue.replaceAll("'", "''") + "'";
}
}
try
{
// stmt.execute("update " + table + " set " + strUpdateSetString + " where id=" + dbId);
stmt.addBatch("update " + table + " set " + strUpdateSetString + " where id='" + dbId + "'");
theResult = true;
} catch (Exception e)
{
theResult = false;
e.printStackTrace();
}
}
// delete 操作
if (updateOperation.equals("delete") && dbId != null)
{
try
{
// stmt.execute("delete from " + table + " where id=" + dbId);
stmt.addBatch("delete from " + table + " where id='" + dbId + "'");
theResult = true;
} catch (Exception e)
{
theResult = false;
e.printStackTrace();
}
}
}
}
try
{
stmt.executeBatch();
theResult = true;
} catch (Exception e)
{
theResult = false;
e.printStackTrace();
}
return theResult;
}
/**
* 将 xml 文档中带有更新标记的记录更新到数据库. 要更新的字段为 <field>里所描述的字段. 元素内必须包含 dbId 属性. 如:<br/> 更新: <row id="1" dbId="1001" name="jacky" email="jacky@domain.com" updateFlag="1"
* updateOperation="update"/><br/> 插入: <row id="2" dbId="1002" name="lucy" email="lucy@domain.com" updateFlag="1" updateOperation="insert"/><br/> 删除: <row id="3" dbId="1003"
* name="temp" email="temp@domain.com" updateFlag="1" updateOperation="delete"/><br/>
*
* @param document
* 要操作的文档
* @param stmt
* statement
* @param table
* 表名
* @return true 为成功; false 为失败.
*/
public boolean saveXmlToDataBase(Document document, Statement stmt, String table)
{
boolean theResult = false;
String strFields = "";
Element element_field = (Element) document.selectSingleNode("//field");
int index = 1;
for (Iterator i = element_field.attributeIterator(); i.hasNext();)
{
Attribute attribute = (Attribute) i.next();
String attribute_name = attribute.getName();
if (attribute_name.equals("id") || attribute_name.equals("updateFlag") || attribute_name.equals("updateOperation") || attribute_name.equals("dbId"))
{
continue;
}
if (index++ != 1)
{
strFields += ",";
}
strFields += attribute_name;
}
theResult = saveXmlToDataBase(document, stmt, table, strFields);
return theResult;
}
/**
* 从rs中获取 xml 文档. rs 通常是带 for xml 的sql语句得出的. xml 编码为 gbk.
*
* @param rs
* 记录集.
* @return Document xml文档.
*/
public Document getXmlFromSqlServerForXmlQuery(ResultSet rs)
{
Document theResult = null;
try
{
Reader reader = null;
StringBuffer sb = new StringBuffer();
char[] charArr = new char[512];
int readCount = 0;
while (rs.next())
{
reader = rs.getCharacterStream(1);
while ((readCount = reader.read(charArr)) > -1)
{
sb.append(charArr, 0, readCount);
}
}
sb.insert(0, "<?xml version=\"1.0\" encoding=\"gbk\"?><root>");
sb.append("</root>");
theResult = this.convertStringToDocument(sb.toString());
} catch (Exception e)
{
System.out.println(e);
}
return theResult;
}
/**
* 从rs中获取 xml 文档. xml 编码为 gbk.
*
* @param stmt
* Statement.
* @return Document xml文档.
*/
public Document getXmlFromSqlServerForXmlQuery(Statement stmt)
{
Document theResult = null;
int i = 0;
try
{
StringBuffer sb = new StringBuffer();
ResultSet rs = null;
Reader reader = null;
char[] charArr = new char[512];
int readCount = 0;
do // 取多个结果集
{
rs = stmt.getResultSet();
i++;
if (rs != null)
{
while (rs.next())
{
reader = rs.getCharacterStream(1);
while ((readCount = reader.read(charArr)) > -1)
{
sb.append(charArr, 0, readCount);
}
}
}
} while (stmt.getMoreResults());
sb.insert(0, "<?xml version=\"1.0\" encoding=\"gbk\"?><root>");
sb.append("</root>");
theResult = this.convertStringToDocument(sb.toString());
} catch (Exception e)
{
System.out.println(e);
}
return theResult;
}
}
- XmlHandle.rar (7.1 KB)
- 下载次数: 19
发表评论
-
sqlserver 报表模板
2011-02-18 17:37 1061sqlserver 报表模板 -
java 获得各种时间
2011-02-15 22:48 1556import java.text.ParseException ... -
一个批量替换某文件夹下包含某字符串的工具
2010-12-08 17:09 1508一个批量替换文件的工具。非常的实用 -
Tree的工具类
2010-11-28 09:22 1217该类通过JSP页面提供的文件路径地址,列出该文件路径下的所有文 ... -
字符串过滤类(StrUtil)
2010-11-03 10:40 1533package com.jobcn.util; public ... -
日期时间处理类(DateUtil)
2010-11-03 10:39 1500/* * DataUtil.java * Created on ... -
数据库连接类DataBase
2010-11-03 10:37 1283/* * */ package com.util; imp ... -
日志记录类(将日志保存在一个文件中)
2010-11-03 10:36 1547package com.util; import java. ... -
datagrid
2010-10-12 08:13 1152一个从视图中选择数据然后打出列表的类. 使用方法,在JSP页 ... -
怎么将异常信息的内容记录到日志文件中
2010-09-26 09:06 1623工具类: package com.util; import ... -
MYECLIPSE6.0.1注册码
2010-09-25 08:06 909package test; import java.io. ...
相关推荐
本文将深入探讨如何使用DOM4J库来读取XML文件。 首先,让我们理解DOM4J的基本概念。DOM4J是基于DOM模型的,DOM(Document Object Model)是一种标准的API,用于解析XML文档并将其表示为一棵由节点组成的树形结构。...
**DOM4J 读取XML字符串** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得处理 XML 文件变得更加简单。DOM4J 的设计理念是简洁、灵活且高性能,它支持 SAX 和 DOM 解析,并提供了面向对象的接口。...
接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...
在本文中,我们将详细探讨如何利用DOM4J库来读取XML文件。 1. **安装DOM4J** 要使用DOM4J,首先需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在`pom.xml`文件中添加以下依赖: ```xml <groupId>...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得XML的解析、创建、查询和修改变得容易。DOM4J的名字来源于"Document Object Model for Java",但它的功能远超出了标准DOM接口的范畴,...
总的来说,"dom4j工具类使用例子"是关于如何使用DOM4J库高效处理XML文档的实例教程。通过`Dom4jUtil.java`和`XMLResult.java`这两个类,我们可以学习到XML的读取、创建、修改等操作,掌握DOM4J的使用技巧,从而在...
在本教程中,我们将深入探讨如何使用DOM4J来解析XML文件,并创建一个无敌连环解析工具类。 首先,我们需要了解XML的基本概念。XML(可扩展标记语言)是一种标记语言,常用于数据交换和存储。它的结构化特性使其非常...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的API,使得开发者可以方便地读取、写入、修改以及查询XML数据。DOM4J的名字来源于Document Object Model (DOM) 和 Java的结合,但它并不局限于...
本文将详细介绍如何使用Dom4j读取XML文件,并通过一个具体示例来进行深入探讨。 #### 二、环境搭建与依赖引入 在开始之前,我们需要先确保项目环境中已经包含了Dom4j库。这一步可以通过添加Dom4j的jar包至项目的类...
1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即Document对象。解析器有SAX和DOM两种模式,SAX是事件驱动的,适用于大文件,而DOM则将整个文档加载到内存中,适合小文件。 2. **创建XML**:DOM4...
要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J是一个Java库,用于处理XML文档。...无论是对于开发人员还是对于那些需要频繁处理XML数据的应用程序来说,DOM4J都是一个非常有价值的工具。
在Java编程中,DOM4J是一个非常流行的XML处理库,它提供了一套强大的API来创建、解析和操作XML文档。本教程将详细讲解如何利用DOM4J进行XML文件的创建和读取。首先,我们需要了解DOM4J的核心概念,如Element、...
3. **DOM4J解析XML**:介绍如何使用DOM4J读取XML文件并创建Document对象,解析XML元素和属性。 4. **DOM4J格式化API**:详述DOM4J库中用于格式化XML的类和方法,如`DocumentHelper.formatDocument()`或`Element....
DOM4J是Java环境中一个强大、灵活的XML处理库,它提供了XML的读取、写入、解析和操作的能力。本篇文章将深入探讨如何利用DOM4J库来实现XSD对XML文档的校验,以确保XML文件符合预先设定的数据结构规则。 首先,理解...
DOM4J是一个Java库,提供了更灵活和高效的XML处理功能,相比DOM,DOM4J提供了更丰富的API和更好的性能。它同样基于DOM模型,但提供了更友好的接口,适合处理大型XML文件。 3. **DOM4J解析步骤**: - 引入DOM4J库...
Java中的DOM4J库是一个非常流行的、开源的Java XML API,它提供了强大的XML处理功能,包括XML的读取、创建、修改以及写入。DOM4J是基于DOM模型的,但相比标准的Java DOM,它提供了更加简洁和高效的API,使得开发者在...
"Dom4j写XML和读取XML的工具类,非常好用" 这个标题表明我们要讨论的是一个使用Dom4j库来处理XML文档的Java工具类。Dom4j是一个非常流行的Java库,它提供了XML的解析、创建、修改以及查询功能,使得在Java中操作XML...