dom4j解析和处理xml文档

本文详细介绍使用DOM4J库进行XML文档的操作方法,包括创建、读取、修改及保存XML文档等内容。涵盖如何构建XML文档结构、添加注释与属性、转换XML字符串等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将介绍
1.如何通过dom4j来对xml文档进行增、删、改、查
2.如何从本地读入xml文档
3.如何把xml文档转换成xml字符串
4.如何把xml输出以指定的编码输出到xml文档。
5.如何把xml字符串转换成document。

创建document、添加节点、属性及注释
package com.xml.dom4j;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;


/**
* 创建document
* @return
*/
public static Document createDomFJ(){
Document doc =DocumentHelper.createDocument();
return doc;
}

/**
* 给文档添加根节点
* @param elName 子节点名称
* @param doc 文档
* @return
*/
public static Element appendChile(String elName,Document doc){
Element root=doc.addElement(elName);
return root;
}
/**
* 给父节点添加子节点
* @param elName 子节点的名称
* @param el 父节点
* @return
*/
public static Element appendChile(String elName,Element el){
Element sub=el.addElement(elName);
return sub;
}
/**
* 添加子节点及其对应的值
* @param elName 子节点的名称
* @param value 子节点的值
* @param el 父节点
*/
public static void appendChile(String elName,String value,Element el){
Element sub=el.addElement(elName);
sub.setText(value);
}
/**
* 根目录添加注释
* @param explain 说明文字
* @param doc
*/
public static void addCommend(String explain,Document doc){
doc.addComment(explain);
}
/**
* 为子节点添加说明
* @param explain
* @param element
*/
public static void addCommend(String explain,Element element){
element.addComment(explain);
}
/**
* 为节点添加属性
* @param attName
* @param attValue
* @param element
*/
public static void addAttribute(String attName,String attValue,Element element){
element.addAttribute(attName, attValue);
}
}


asXML可以将文档或元素转换成一段xml字符串
String docStr=doc.asXML(); //把xml文档转换成字符串
System.out.println("docStr==="+docStr);
String pdsStr=pds.asXML(); //把父节点转换成字符串
System.out.println("pdsStr=="+pdsStr);

parseText完成将xml字符串转换成Doc的功能
String pdsStr=<PDS><HEAD><TRNCOD>交易代码</TRNCOD><LGNNAM>登陆名称</LGNNAM></HEAD></PDS>;
Document docpds=null;
try {
docpds=DocumentHelper.parseText(docStr);
docpds.setXMLEncoding("GBK");
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

XMLWriter类可以把文档写入到文件中,并设置编码“GBK”
public class JavaCreateDom4j {
public static void main(String[] args){
//引用http://www.blogjava.net/hoojo/archive/2011/08/11/356310.html
Document doc=createDomFJ();
doc.addComment("以GBK的编码");
Element pds=doc.addElement("PDS");
/*格式化输出*/
org.dom4j.io.OutputFormat format=org.dom4j.io.OutputFormat.createPrettyPrint();//紧缩
format.setEncoding("GBK"); //设置GBK编码
Element head=pds.addElement("HEAD");

递归显示xml文档内容
//文件格式:
<?xml version="1.0" encoding="GBK"?>
<!--以GBK的编码-->
<PDS>
<HEAD>
<TRNCOD>交易代码</TRNCOD>
<LGNNAM>登陆名称</LGNNAM>
</HEAD>
<body>
<name>张学友</name>
</body>
</PDS>


//dom4j遍历xml文档
=====================================
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;


public class JavaCreateDom4j {
public static void main(String[] args){
//读取xml文档
SAXReader saxReader=new SAXReader();
Document doc=null;
try {
doc =saxReader.read(new FileInputStream(new File("d:/test/xml/dom4jtest1.xml")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<Element> listEl=doc.getRootElement().elements();
print(listEl);
}
/**
* 递归显示文档内容
* @param els elements数组
*/
public static void print(List<Element> els){
for(Element el:els){
System.out.println("##"+el.getName()+"--value=="+el.getTextTrim());
if(el.hasContent()){
print(el.elements());
}
}
}
Element trancod=head.addElement("TRNCOD");
trancod.setText("交易代码");
Element lgnnam=head.addElement("LGNNAM");
lgnnam.setText("登陆名称");
try {
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("d:/test/xml/dom4jtest1.xml")),format);
writer.write(doc);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值