DOM4J处理XML方法记录,附XPATH写法


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");

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值