package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import com.baje.sz.util.Doc;
public class Dom4jSoap {
/**
* 取根元素
* @param path
* @return
* @throws DocumentException
*/
public static Element getRoot(String path) throws DocumentException{
Document document;
SAXReader reader=new SAXReader();
document=reader.read(new File(path));
Element root=document.getRootElement();
return root;
}
public static void readSoap(Element element){
if(element.elements().size()==0){
System.out.println(element.getName()+"*="+element.getText());
return;
}
for (Iterator<Element> iter=element.elementIterator();iter.hasNext();) {
Element ele=iter.next();
if(ele.getParent().getName().equalsIgnoreCase("Envelope")){
System.out.println("-------------------------Envelope的直接子元素:"+ele.getName()+",,"+ele.attributeValue("xmlns"));
}
System.out.println(ele.getName()+"%="+ele.getText().trim());
if(ele.elements().size()!=0){
System.out.println(("element "+ele.getName()+" has "+ele.elements().size())+(ele.elements().size()==1?" subTag it is ":" subTags there are"));
readSoap(ele);
}
if(ele.getName().equals("UserName")){
System.out.println("path="+ele.getPath());
}
}
}
/**
* 获取节点的元素的值
* @param filename
* @param xmlpath="//*[name()='Date'][@id='aa']/*[name()='aaa']"
* @return
*/
public static String getElementText(String filename, String xmlpath,String encode) {
try {
Document document;
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
document=reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator iter = list.iterator();iter.hasNext();){
Element e = (Element)iter.next();
return e.getText();
}
return "";
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 取指定节点元素的属性的值
* @param filename
* @param xmlpath="//*[name()='Date'][@id='bb']/@ac"
* @param encode
* @return
*/
public static String getAttributesText(String filename, String xmlpath,String encode){
try {
Document document;
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
document=reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator iter=list.iterator();iter.hasNext();){
Attribute a = (Attribute)iter.next();
return a.getText();
}
return "";
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 获取指定元素下所有元素值到LIST
* @param filename
* @param xmlpath="//*[name()='Date']"
* @param encode
* @return
*/
public static List xmlElement2List(String filename,String xmlpath,String encode) {
try {
List xmllist = new ArrayList();
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator iter=list.iterator();iter.hasNext();){
Element e = (Element)iter.next();
Doc doc = new Doc();
for(Iterator iter2=e.elementIterator();iter2.hasNext();){
Element e2=(Element)iter2.next();
doc.put(e2.getName(), e2.getText());
}
xmllist.add(doc);
}
return xmllist;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取指定元素的属性值
* @param filename
* @param xmlpath="//*[name()='Date']"
* @param encode
* @return
*/
public static List xmlAttributes2List(String filename,String xmlpath,String encode) {
try {
List xmllist = new ArrayList();
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator iter=list.iterator();iter.hasNext();){
Element e = (Element)iter.next();
Doc doc = new Doc();
for(Iterator iter2=e.attributeIterator();iter2.hasNext();){
Attribute attribute = (Attribute)iter2.next();
doc.put(attribute.getName(),attribute.getValue());
}
xmllist.add(doc);
}
return xmllist;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 取指定节点的子元素存到DOC
* @param filename
* @param xmlpath="//*[name()='Date'][@id='bb']",
* @param encode
* @return
*/
public static Doc xmlElement2Doc(String filename,String xmlpath,String encode){
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
Doc doc = new Doc();
for(Iterator iter = list.iterator();iter.hasNext();){
Element e = (Element)iter.next();
for(Iterator iter2 = e.elementIterator();iter2.hasNext();){
Element e2 = (Element)iter2.next();
doc.put(e2.getName(), e2.getText());
}
}
return doc;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 取指定节点的属性值到DOC
* @param filename
* @param xmlpath="//*[name()='Date'][@id='bb']"
* @param encode
* @return
*/
public static Doc xmlAttribute2Doc(String filename,String xmlpath,String encode){
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
Doc doc = new Doc();
for(Iterator iter = list.iterator();iter.hasNext();){
Element e =(Element)iter.next();
for(Iterator iter2=e.attributeIterator();iter2.hasNext();){
Attribute a = (Attribute)iter2.next();
doc.put(a.getName(), a.getValue());
}
}
return doc;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* XML文件转为STRING
* @param filename
* @param encode
* @return
*/
public static String xml2string(String filename,String encode){
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
return document.asXML();
}catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* STRING转为XML
* @param str
* @return
*/
public static Document string2xml(String str){
try{
Document document = DocumentHelper.parseText(str);
return document;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 创建XML文件
* @param document
* @param filepath
* @param encode
* @return
*/
public static int createXmlFile(Document document,String filepath,String encode){
XMLWriter writer = null;
try{
File file = new File(filepath);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(encode);
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(file),encode), format);
writer.write(document);
writer.close();
return 0;
}catch (Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* 将LIST数据写入到节点元素值
* @param list
* @param filepath
* @param xmlroot
* @param row
* @param encode
* @return
*/
public static int createXmlList2Element(List list, String filepath,String xmlroot,String row,String encode) {
try {
if (xmlroot.equals("")){
xmlroot="xml";
}
if (row.equals("")){
row="row";
}
Document document = DocumentHelper.createDocument();
Element rootElement = document.addElement(xmlroot);
Element rowxml,index;
if(list != null && !list.isEmpty()) {
for(Iterator its2 = list.iterator();its2.hasNext();) {
Doc rowDoc = (Doc)its2.next();
Set set = rowDoc.keySet();
rowxml = rootElement.addElement(row);
for (Iterator its = set.iterator(); its.hasNext();) {
String key = (String) its.next();
String values = rowDoc.get(key);
index = rowxml.addElement(key);
index.setText(String.valueOf(values));
}
}
}
createXmlFile(document,filepath,encode);
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* 根据XPATH插入LIST的值到指定节点元素值
* @param list
* @param filepath
* @param xmlpath
* @param row
* @param attrDoc=row节点属性KEY VALUE
* @return
*/
public static int list2Element(List list ,String filepath,String xmlpath,String row,Doc attrDoc, String encode){
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filepath));
Document document = reader.read(in,encode);
/** 先用xpath查找对象 */
List xlist = document.selectNodes(xmlpath);
Iterator iter = xlist.iterator();
if(iter.hasNext()){
Element e = (Element)iter.next();
Element e2=e.addElement(row);
if(attrDoc!=null && !attrDoc.isEmpty()){
Set aset = attrDoc.keySet();
for(Iterator aits = aset.iterator();aits.hasNext();){
String akey=(String)aits.next();
e2.addAttribute(akey, attrDoc.get(akey));
}
}
if(list!=null && !list.isEmpty()){
for(Iterator its=list.iterator();its.hasNext();){
Doc doc = (Doc)its.next();
Set set = doc.keySet();
for(Iterator its2=set.iterator();its2.hasNext();){
String key = (String)its2.next();
String values = doc.get(key);
Element e3=e2.addElement(key);
e3.setText(values);
}
}
}
}
createXmlFile(document,filepath,encode);
return 0;
}catch (Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* 将LIST数据写入到节点属性值
* @param list
* @param filepath
* @param xmlroot
* @param row
* @param encode
* @return
*/
public static int createXmlList2Attrbute(List list, String filepath,String xmlroot,String row,String encode) {
try {
if (xmlroot.equals("")){
xmlroot="xml";
}
if (row.equals("")){
row="row";
}
Document document = DocumentHelper.createDocument();
Element rootElement = document.addElement(xmlroot);
Element rowxml;
if(list != null && !list.isEmpty()) {
for(Iterator its2 = list.iterator();its2.hasNext();) {
Doc rowDoc = (Doc)its2.next();
Set set = rowDoc.keySet();
rowxml = rootElement.addElement(row);
for (Iterator its = set.iterator(); its.hasNext();) {
String key = (String) its.next();
String values = rowDoc.get(key);
rowxml.addAttribute(key,values);
}
}
}
createXmlFile(document,filepath,encode);
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* 根据XPATH修改指定节点的属性值
* @param filepath
* @param xmlpath
* @param row
* @param attrDoc
* @param encode
* @return
*/
public static int doc2attrbute(String filepath,String xmlpath,String row,Doc attrDoc, String encode){
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filepath));
Document document = reader.read(in,encode);
/** 先用xpath查找对象 */
List xlist = document.selectNodes(xmlpath);
Iterator iter = xlist.iterator();
if(iter.hasNext()){
Element e = (Element)iter.next();
Element e2=e.addElement(row);
if(attrDoc!=null && !attrDoc.isEmpty()){
Set aset = attrDoc.keySet();
for(Iterator aits = aset.iterator();aits.hasNext();){
String akey=(String)aits.next();
e2.addAttribute(akey, attrDoc.get(akey));
}
}
}
createXmlFile(document,filepath,encode);
return 0;
}catch (Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* 根据XPATH修改指定节点元素值
* @param filename
* @param xmlpath="//*[name()='Date'][@id='aa']/*[name()='aaa']"
* @param value
* @param encode
* @return
*/
public static int ModiXmlElement(String filename,String xmlpath,String value,String encode){
int returnValue = -1;
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
/** 先用xpath查找对象 */
List list = document.selectNodes(xmlpath);
Iterator iter = list.iterator();
while(iter.hasNext()){
Element ownerElement = (Element)iter.next();
ownerElement.setText(value);
}
try{
/** 将document中的内容写入文件中 */
createXmlFile(document,filename,encode);
/** 执行成功,需返回0 */
returnValue = 0;
}catch(Exception ex){
ex.printStackTrace();
}
}catch(Exception ex){
ex.printStackTrace();
}
return returnValue;
}
/**
* 根据XPATH修改指定节点的指定属性值
* @param filename
* @param xmlpath="//*[name()='Date'][@id='aa']"
* @param node
* @param value
* @param encode
* @return
*/
public static int ModiXmlFileAttrbute(String filename,String xmlpath,String node,String value,String encode){
int returnValue = -1;
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
/** 修改内容之一: 如果book节点中show参数的内容为yes,则修改成no */
/** 先用xpath查找对象 */
// List list = document.selectNodes("/books/book/@show" );
List list = document.selectNodes(xmlpath);
Iterator iter = list.iterator();
while(iter.hasNext()){
Element e = (Element)iter.next();
e.addAttribute(node,value);
}
try{
/** 将document中的内容写入文件中 */
createXmlFile(document,filename,encode);
/** 执行成功,需返回0 */
returnValue = 0;
}catch(Exception ex){
ex.printStackTrace();
}
} catch(Exception ex){
ex.printStackTrace();
}
return returnValue;
}
/**
* 删除指定节点
* @param filename
* @param xmlpath
* @param value
* @param encode
* @param i,1=0为删除当前row节点,1为删除row父节点
* @return
*/
public static int delElement(String filename,String xmlpath,String row,String value,String encode,int i){
int returnValue=-1;
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator its = list.iterator();its.hasNext();){
Element e = (Element)its.next();
for(Iterator iter2=e.elementIterator(row);iter2.hasNext();){
Element e2=(Element)iter2.next();
if(e2.getText().equals(value)){
if(i==0){
e.remove(e2);
}else if(i==1){
e.getParent().remove(e);
}
}
}
}
createXmlFile(document,filename,encode);
returnValue=0;
} catch(Exception ex){
ex.printStackTrace();
}
return returnValue;
}
/**
* 删除指定属性的节点,xmlpath包含属性值
* @param filename
* @param xmlpath="//*[name()='Dates']/*[name()='Date'][@ac='7788']"
* @param encode
* @return
*/
public static int delAttrbute(String filename,String xmlpath,String encode){
int returnValue=-1;
try{
SAXReader reader=new SAXReader();
InputStream in = new FileInputStream(new File(filename));
Document document = reader.read(in,encode);
List list = document.selectNodes(xmlpath);
for(Iterator its = list.iterator();its.hasNext();){
Element e = (Element)its.next();
e.getParent().remove(e);
}
createXmlFile(document,filename,encode);
returnValue=0;
}catch(Exception ex){
ex.printStackTrace();
}
return returnValue;
}
public static void main(String[] args) throws DocumentException {
//String path1="F:/workspace/HelloWorlds/aa.xml";
String path="F:/workspace/HelloWorlds/cc.xml";
//System.out.println(Dom4jSoap.getElementText(path1, "/soap:Envelope/soap:Body/*[name()='Login']/*[name()='loginRequest']/*[name()='UserName']","uft-8"));
//System.out.println(Dom4jSoap.getElementText(path, "//*[name()='Date'][@id='aa']/*[name()='aad']","uft-8"));//"//"表示从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
//System.out.println(Dom4jSoap.getAttributesText(path,"//*[name()='Date'][@id='bb']/@ac","utf-16"));
//System.out.println(Dom4jSoap.getElementText(path, "/soap:Envelope/soap:Body/*[name()='GetHotelInventoryResult']/*[name()='Hotels']/*[name()='Hotel']/*[name()='Rooms']/*[name()='RoomType']/*[name()='Dates']/*[name()='Date'][@di='aa']/*[name()='aad']","utf-16"));
//System.out.println(Dom4jSoap.xmlElement2List(path,"//*[name()='Date']","utf-16"));
//System.out.println(Dom4jSoap.xmlAttributes2List(path,"//*[name()='Date']","utf-16"));
//Dom4jSoap.xmlElement2Doc(path,"//*[name()='Date'][@id='bb']","utf-16");
//Dom4jSoap.xmlAttribute2Doc(path,"//*[name()='Date'][@id='bb']","utf-16");
//System.out.println(Dom4jSoap.xml2string(path,"utf-16"));
//Document document = Dom4jSoap.string2xml("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><person id=\"aa\"><name>afds</name></person></soap:Body></soap:Envelope>");
//Dom4jSoap.createXmlFile(document, "F:/workspace/HelloWorlds/dd.xml", "utf-16");
//List list = new ArrayList();
//Doc doc = new Doc();
//doc.put("aa", 1);
//doc.put("bb", 2);
//list.add(doc);
//doc.put("aa", 11);
//doc.put("bb", 12);
//list.add(doc);
//Dom4jSoap.createXmlList2Element(list, "F:/workspace/HelloWorlds/dd.xml", "test", "room", "utf-8");
//Dom4jSoap.ModiXmlElement("F:/workspace/HelloWorlds/cc.xml", "//*[name()='Date'][@id='aa']/*[name()='aaa']", "222", "utf-16");
//Dom4jSoap.ModiXmlFileAttrbute("F:/workspace/HelloWorlds/cc.xml", "//*[name()='Date'][@id='aa']","ac", "22232", "utf-16");
/**
*
List list = new ArrayList();
Doc doc = new Doc();
doc.put("AvailableDate", 1);
doc.put("AvailableAmount", 2);
doc.put("RoomInvStatusCode", 3);
doc.put("IsOverBooking", 4);
doc.put("BookingStartDate", 5);
doc.put("BookingEndDate", 6);
doc.put("BookingBeginTime", 7);
doc.put("BookingEndTime", 8);
list.add(doc);
Doc adoc = new Doc();
adoc.put("id", "3322");
adoc.put("ac", "7788");
Dom4jSoap.list2Element(list, "F:/workspace/HelloWorlds/cc.xml", "//*[name()='Dates']", "Date",adoc, "utf-16");
*/
/**
*
Doc adoc = new Doc();
adoc.put("id", "3322");
adoc.put("ac", "7788");
Dom4jSoap.doc2attrbute("F:/workspace/HelloWorlds/cc.xml", "//*[name()='Dates']", "Date",adoc, "utf-16");
*/
//Dom4jSoap.delElement("F:/workspace/HelloWorlds/cc.xml", "//*[name()='Dates']/*[name()='Date']","bbt", "7", "utf-16",1);
Dom4jSoap.delAttrbute("F:/workspace/HelloWorlds/cc.xml", "//*[name()='Dates']/*[name()='Date'][@ac='7788']", "utf-16");
}
}
分享到:
相关推荐
用dom4j解析xml时,经常需要用到xpath,由于dom4j-1.6.1.jar不包括jaxen-1.1-beta-6.jar,导致使用xpath报错。 其中jaxen-full.jar是为了解决ava.lang.NoClassDefFoundError: org/jaxen/JaxenException错误。 下载的...
该示例实现MAVEN来进行创建的,实现了dom4j操作XML文件,包括创建XML、动态创建XML节点、更新XML节点、删除XML节点。
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
dom4j和xpath的jar包,解析xml的最佳拍档.
xml+dom4j+xpath资料
http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html 的doc文档。
使用dom4j解析xml时用到的jar包dom4j-1.6.1.zip xpath用到的jar包jaxen-1.1-beta-6.jar
NULL 博文链接:https://even2012.iteye.com/blog/1832068
dom4j 和dom4j 是一款比较好用的Xml解析工具jar,其中部分功能需要xpath的支持
详细介绍dom4j_xpath,相信对想学dom4j_xpath的朋友有帮助
Dom4j 解析XML 所使用的jar包,及添加XPath 支持所需要的 jar 包。具体使用可看我博客
XML节点访问的路径表达式【相对路径】和【绝对路径】的匹配原则
dom4j+xpath 解析和创建 xml 文件的简单实例
JDOM、Dom4j操作xml文档 创建xml xpath query xml元素,完成xml的创建、节点的创建、修改、遍历,xpath的遍历xml节点元素
dom4j基础入门文档,与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。
dom4j和xpath必备jar包对xml文档进行解析的必须jar包!
包含dom4j CHM格式的API文档 xpath说明文档 利用dom4j读写XML程序
NULL 博文链接:https://wangweiwei358.iteye.com/blog/764548
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
为了方便网友编程,将资源...org.dom4j.xpath Provides the core tools needed to use the XPath library org.dom4j.xpp Provides implementation classes to cleanly integrate dom4j with the XML Pull Parser XPP