练习使用Jdom处理XML
package sunstar.chenzhuo.jdom;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
/**
*
* @Description 练习使用jdom处理XML文件
* @Author chenzhuo
* @Date 2007-1-25
*
*/
public class JdomUtils {
/**
* @param args
*/
public static void main(String[] args) {
String xmlText = "
";
String fileName = "h:/20070125/test/test.xml";
writeTextToXml(xmlText, fileName);
Element node = new Element("student");
Element name = new Element("name");
Element sex = new Element("sex");
Element age = new Element("age");
name.setText("王五");
sex.setText("女");
age.setText("23");
node.addContent(name);
node.addContent(sex);
node.addContent(age);
String parentNodeName = "students";
int parentIndex = 0;
int addIndex = 3;
addNode(fileName, node, parentNodeName, parentIndex, addIndex);
Element students = new Element("students");
Element student = new Element("student");
Element name2 = new Element("name");
name2.setText("王三");
//在这里student节点不能再使用name节点了(因为它已经被node节点使用了)!!!
student.addContent(name2);
students.addContent(student);
addNode(fileName, students, "document", 0, 2);
removeNode(fileName, "students", 1, 1);
}
/**
* <P>Description: 在指定的xml文件中删除某个节点(按指定的位置)</P>
* @param fileName 指定xml文件名
* @param parentNodeName 指定要删除节点的父节点名称
* @param parentIndex 指定要删除节点父节点的索引位置(索引从零开始)
* @param removeIndex 指定要删除节点的索引位置(索引从零开始,包含文本节点)
*/
public static void removeNode(String fileName,String parentNodeName,int parentIndex,int removeIndex)
{
SAXBuilder builder = new SAXBuilder();
File file = new File(fileName);
BufferedReader in = null;
BufferedWriter wr = null;
Document doc = null;
try{
in = new BufferedReader(new FileReader(file));
doc = builder.build(in);
XPath path = XPath.newInstance("//" + parentNodeName);
Element parentNode = (Element) path.selectNodes(doc).get(parentIndex);
parentNode.removeContent(removeIndex);
wr = new BufferedWriter(new FileWriter(fileName));
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
out.output(doc, wr);
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null)
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <P>Description: 在指定的xml文件中添加一个节点(规定添加的位置)</P>
* @param fileName 指定xml文件名
* @param node 指定需要添加的节点元素
* @param parentNodeName 指定父节点的名称
* @param parentIndex 指定父节点的索引位置(索引从零开始)
* @param addIndex 指定添加节点在父节点下的索引位置(索引从零开始,包含文本节点)
*/
public static void addNode(String fileName, Element node, String parentNodeName, int parentIndex, int addIndex) {
SAXBuilder builder = new SAXBuilder();
File file = new File(fileName);
BufferedReader in = null;
BufferedWriter wr = null;
Document doc = null;
try {
in = new BufferedReader(new FileReader(file));
doc = builder.build(in);
Element parent = null;
// Iterator itr = doc.getDescendants(new ElementFilter(parentNodeName));
// for(int i = 0;itr.hasNext() && i < parentIndex;i++)
// {
// parent = (Element) itr.next();
// }
XPath path = XPath.newInstance("//" + parentNodeName);
parent = (Element) path.selectNodes(doc).get(parentIndex);
parent.addContent(addIndex, node);
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
wr = new BufferedWriter(new FileWriter(fileName));
out.output(doc,wr);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null)
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <P>Description: 获取一个经过一般格式规范的XMLOupputter</P>
* @param encoding TODO
* @param indent TODO
* @return
*/
public static XMLOutputter getXMLOutputterWithFormat(String encoding, String indent) {
Format format = Format.getCompactFormat();
//设置xml文件的字符为gb2312
format.setEncoding(encoding);
//设置xml文件的缩进为4个空格
format.setIndent(indent);
XMLOutputter out = new XMLOutputter(format);
return out;
}
/**
* <P>Description: 将一个xml格式的字符串(该字符串中不能含有xml中的特殊字符,如:"&")写入到指定的xml文件中</P>
* @param xmlText
* @param fileName
*/
public static void writeTextToXml(String xmlText, String fileName) {
BufferedReader in = new BufferedReader(new StringReader(xmlText));
SAXBuilder builder = new SAXBuilder();
Document doc = new Document();
File file = new File(fileName);
FileWriter wr = null;
try {
doc = builder.build(in);
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
if(!file.exists())
{
file = FileUtils.createFile(fileName);
}
wr = new FileWriter(file);
out.output(doc, wr);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null )
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
/**
*
* @Description 练习使用jdom处理XML文件
* @Author chenzhuo
* @Date 2007-1-25
*
*/
public class JdomUtils {
/**
* @param args
*/
public static void main(String[] args) {
String xmlText = "
xml 代码
- <document><students><student><name>张三</name><sex>男</sex><age>23</age></student></students></document>
String fileName = "h:/20070125/test/test.xml";
writeTextToXml(xmlText, fileName);
Element node = new Element("student");
Element name = new Element("name");
Element sex = new Element("sex");
Element age = new Element("age");
name.setText("王五");
sex.setText("女");
age.setText("23");
node.addContent(name);
node.addContent(sex);
node.addContent(age);
String parentNodeName = "students";
int parentIndex = 0;
int addIndex = 3;
addNode(fileName, node, parentNodeName, parentIndex, addIndex);
Element students = new Element("students");
Element student = new Element("student");
Element name2 = new Element("name");
name2.setText("王三");
//在这里student节点不能再使用name节点了(因为它已经被node节点使用了)!!!
student.addContent(name2);
students.addContent(student);
addNode(fileName, students, "document", 0, 2);
removeNode(fileName, "students", 1, 1);
}
/**
* <P>Description: 在指定的xml文件中删除某个节点(按指定的位置)</P>
* @param fileName 指定xml文件名
* @param parentNodeName 指定要删除节点的父节点名称
* @param parentIndex 指定要删除节点父节点的索引位置(索引从零开始)
* @param removeIndex 指定要删除节点的索引位置(索引从零开始,包含文本节点)
*/
public static void removeNode(String fileName,String parentNodeName,int parentIndex,int removeIndex)
{
SAXBuilder builder = new SAXBuilder();
File file = new File(fileName);
BufferedReader in = null;
BufferedWriter wr = null;
Document doc = null;
try{
in = new BufferedReader(new FileReader(file));
doc = builder.build(in);
XPath path = XPath.newInstance("//" + parentNodeName);
Element parentNode = (Element) path.selectNodes(doc).get(parentIndex);
parentNode.removeContent(removeIndex);
wr = new BufferedWriter(new FileWriter(fileName));
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
out.output(doc, wr);
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null)
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <P>Description: 在指定的xml文件中添加一个节点(规定添加的位置)</P>
* @param fileName 指定xml文件名
* @param node 指定需要添加的节点元素
* @param parentNodeName 指定父节点的名称
* @param parentIndex 指定父节点的索引位置(索引从零开始)
* @param addIndex 指定添加节点在父节点下的索引位置(索引从零开始,包含文本节点)
*/
public static void addNode(String fileName, Element node, String parentNodeName, int parentIndex, int addIndex) {
SAXBuilder builder = new SAXBuilder();
File file = new File(fileName);
BufferedReader in = null;
BufferedWriter wr = null;
Document doc = null;
try {
in = new BufferedReader(new FileReader(file));
doc = builder.build(in);
Element parent = null;
// Iterator itr = doc.getDescendants(new ElementFilter(parentNodeName));
// for(int i = 0;itr.hasNext() && i < parentIndex;i++)
// {
// parent = (Element) itr.next();
// }
XPath path = XPath.newInstance("//" + parentNodeName);
parent = (Element) path.selectNodes(doc).get(parentIndex);
parent.addContent(addIndex, node);
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
wr = new BufferedWriter(new FileWriter(fileName));
out.output(doc,wr);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null)
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <P>Description: 获取一个经过一般格式规范的XMLOupputter</P>
* @param encoding TODO
* @param indent TODO
* @return
*/
public static XMLOutputter getXMLOutputterWithFormat(String encoding, String indent) {
Format format = Format.getCompactFormat();
//设置xml文件的字符为gb2312
format.setEncoding(encoding);
//设置xml文件的缩进为4个空格
format.setIndent(indent);
XMLOutputter out = new XMLOutputter(format);
return out;
}
/**
* <P>Description: 将一个xml格式的字符串(该字符串中不能含有xml中的特殊字符,如:"&")写入到指定的xml文件中</P>
* @param xmlText
* @param fileName
*/
public static void writeTextToXml(String xmlText, String fileName) {
BufferedReader in = new BufferedReader(new StringReader(xmlText));
SAXBuilder builder = new SAXBuilder();
Document doc = new Document();
File file = new File(fileName);
FileWriter wr = null;
try {
doc = builder.build(in);
XMLOutputter out = getXMLOutputterWithFormat("GBK", " ");
if(!file.exists())
{
file = FileUtils.createFile(fileName);
}
wr = new FileWriter(file);
out.output(doc, wr);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(wr != null )
{
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
发表评论
-
jdom学习(5)
2007-01-26 16:00 988Jdom使用详解及实例(5) 接上一节: 6、数据输入要 ... -
jdom学习(4)
2007-01-26 15:29 977Jdom使用详解及实例(4) ... -
jdom学习(3)
2007-01-26 15:08 873Jdom使用详解及实例(3) 接上一节: 4.Attrib ... -
jdom学习(2)
2007-01-26 14:57 1029Jdom使用详解及实例(2) 接上一节: (3)DOM的 ... -
jdom学习(1)
2007-01-26 14:23 939Jdom使用详解及实例(1) 一.Jdom包简介: JDOM ...
相关推荐
jdom学习读取xml文件资料小列子,非常简单明了。
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在Java应用程序和Spring框架中...通过阅读提供的`jdom.doc`文档和`jdom学习读取xml文件.files`中的示例,你可以更全面地掌握这些知识。
**JDom学习资料详解** JDom,全称为Java Document Object Model,是一款专为Java设计的DOM(Document Object Model)解析库。它允许开发者以一种高效、便捷的方式处理XML文档,提供了一种基于Java的API来创建、修改...
**JDOM:XML处理的利器** 在信息技术领域,XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等场景。为了方便开发者处理XML文档,各种解析库应运而生,其中...
6. **`XPath`**:JDOM支持XPath表达式,通过`XPath`类可以方便地查找XML文档中的特定节点。 在实际应用中,你可以使用JDOM来执行以下操作: - **解析XML**:通过`SAXBuilder`或`DOMBuilder`从XML文件或字符串创建`...
1. **jdom-2.0.6-javadoc.jar**: 包含了JDOM 2.0.6版本的API文档,开发者可以通过查看这个JAR来了解JDOM的所有类、接口和方法,便于学习和使用。 2. **jdom-2.0.6-sources.jar**: 提供了JDOM 2.0.6的源代码,开发者...
对于开发者来说,这是了解和学习 JDOM 的重要资源。文档详细解释了每个类、接口和方法的用法,帮助开发者快速上手。 总结,JDOM 1.1.2 是一个强大且易于使用的 XML 处理库,特别适合 Java 开发者。其提供的 API ...
1. **jdom-2.0.5-javadoc.jar**:这是JDOM的API文档,开发者可以通过查看这个JAR文件中的文档来了解每个类和方法的详细信息,这对于学习和使用JDOM非常有帮助。 2. **jdom-2.0.5-sources.jar**:包含了JDOM库的源...
然而,对于理解和学习XML处理,JDOM1.1仍是一个优秀的起点,尤其是结合提供的API文档和源代码,可以帮助开发者快速掌握XML编程技巧。 总之,JDOM1.1是Java环境下处理XML文档的一个强大工具,尤其适合小型到中型的...
JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种方便、高效的方式来创建、构建、修改和读取XML文档。JDOM的主要目标是简化XML处理,使得开发者能更直观地操作XML数据,而无需...
这个压缩包"jdom-2.0_6.zip"包含了多个相关的JAR文件,分别是用于文档注释、源代码、单元测试以及核心功能和扩展功能的JAR。 首先,"jdom-2.0.6-javadoc.jar"是JDOM 2.0.6的API文档,其中包含了详细的类、方法和...
### JDOM教程知识点详解 #### 一、JDOM简介 ...通过上述知识点的学习,我们可以了解到JDOM的基本使用方法,包括创建XML文档、解析XML文档以及使用XPath进行查询等功能。这对于开发者来说是非常有价值的工具。
《JDOM英文帮助文档》是Java开发者不可或缺的参考资料,尤其对于初学者而言,它提供了全面且深入的JDOM库知识。JDOM,全称为Java Document Object Model,是Java平台上的...总之,这份文档是学习和应用JDOM的宝贵资源。
6. **JDOMWriter**和**JDOMReader**: 这两个类用于将JDOM文档写入XML文件或从XML文件读取到JDOM文档。 在Web开发中,JDOM的应用广泛,例如: - **配置文件处理**: 许多Web应用需要读取和写入XML配置文件,JDOM提供...
总的来说,通过对JDOM源代码的深入学习,不仅可以提升你对XML处理的理解,还能帮助你更好地利用JDOM进行XML数据的处理,提高开发效率,避免潜在的问题。无论你是初次接触JDOM,还是希望深化对它的认识,研究源代码都...
- **jdom-2.0.1-sources.jar**:包含了 JDOM 的源代码,方便开发者查看和学习实现细节。 - **jdom-2.0.1-contrib.jar**:可能包含了一些额外的贡献代码或示例。 - **lib**:可能是一个包含依赖库的目录,确保 JDOM...
总之,JDOM是Java开发者处理XML的得力工具,它的API文档和示例能加速你的学习过程,使你能够更高效地在项目中利用XML数据。无论你是新手还是经验丰富的开发者,理解并掌握JDOM都将对你的XML编程技能大有裨益。
### JDOM介绍及使用指南 #### 一、JDOM包概览 JDOM是一个轻量级的Java XML API,它提供了简洁的API用于处理XML文档。JDOM的主要优点在于其...对于初学者来说,JDOM的学习曲线相对平缓,同时也能满足高级用户的需求。
`jdom-test-1.1.1.zip`文件包含了这些测试代码,对于学习JDOM的使用和理解其内部机制具有很高的价值。 总之,JDOM 1.1.1为Java开发者提供了一种强大的工具,用于处理XML文档。它的面向对象设计、XPath支持以及丰富...
总的来说,JDOM1.1是Java环境下处理XML文档的强大工具,其源码的学习不仅可以帮助我们掌握XML解析和操作的基本原理,还能提高我们在实际项目中应用XML的能力。通过深入分析JDOM1.1的源码,我们可以更好地理解Java与...