练习使用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 982Jdom使用详解及实例(5) 接上一节: 6、数据输入要 ... -
jdom学习(4)
2007-01-26 15:29 974Jdom使用详解及实例(4) ... -
jdom学习(3)
2007-01-26 15:08 870Jdom使用详解及实例(3) 接上一节: 4.Attrib ... -
jdom学习(2)
2007-01-26 14:57 1020Jdom使用详解及实例(2) 接上一节: (3)DOM的 ... -
jdom学习(1)
2007-01-26 14:23 937Jdom使用详解及实例(1) 一.Jdom包简介: JDOM ...
相关推荐
Umi-OCR-main.zip
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
基于springboot校外兼职教师考勤管理系统源码数据库文档.zip
58商铺全新UI试客试用平台网站源码
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于SpringBoot的口腔诊所系统源码数据库文档.zip
数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/143956923
3-240P2162218.zip
网络安全 基于Qt创建的Linux系统下的浏览器.zip
C++ 类和对象:多态-练习题目2(制作咖啡和茶叶)
基于springboot+J2EE在线项目管理与任务分配中的应用源码数据库文档.zip
简介本项目提供了一个在51单片机上运行的简单操作系统,旨在帮助学习者深入理解操作系统的基本原理和任务调度机制。该操作系统通过汇编和C语言编写,实现了任务调度、中断处理等核心功能,并提供了详细的源代码和注释,方便学习和实践。
本文将深度卷积神经网络(CNN)设计实现一个复杂结构的生成模型,旨在通过多阶段的编码器-解码器结构,能够有效地将灰度图像转换为彩色图像。最后,本文将实现一个简单的Web应用,用户可以通过上传灰度图像,应用会使用预训练的Caffe模型对其进行颜色化,并将结果返回给用户。 1.模型设计:模型由多个卷积层、ReLU激活函数和批归一化层组成,通过前向传播函数将输入的灰度图像(L通道)转换为彩色图像(ab通道)。如果指定了 pretrained=True,则会自动下载并加载预训练的模型权重。 2. 系统通过Flask框架提供了一个Web应用,用户可以上传灰度图像,系统会自动将其转换为彩色图像,并在网页上显示结果。整个过程包括文件验证、图像处理、颜色化预测和结果展示,具有较高的实用性和用户体验。
一个JAVA图形化的、联网的五子棋游戏.zip javaweb
KWDB 是一款面向 【AIoT 场景】的【分布式多模数据库】,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
页面数量:7页 网页主题:网站模板、酒店网站模板、官方网站模板 网页页面:首页、关于我们、相关服务、服务详情、在线博客、博客详情、在线留言 页面实现元素:加载动画、滚动加载、主题切换、导航栏 、轮播图、图文列表、图片切换、 文字列表、 按钮悬停、图片悬停、表单 实现技术:HTML、CSS 、JQuery 源码样式及js文件均分开存放,所有内容仅供初学者学习参考
内容概要:本文档提供了详细的 Neo4j 安装与配置指南,涵盖 Windows、Linux 和 Mac 系统的安装步骤。具体包括下载、安装、启动服务、修改配置文件(如端口配置、远程访问和内存限制)、设置管理员密码以及基本的 Cypher 查询语言使用方法。同时,还提供了一些常见问题及其解决方案。 适合人群:数据库管理员、软件开发人员、系统管理员。 使用场景及目标:①帮助初学者快速掌握 Neo4j 的安装与配置;②适用于需要搭建和使用图数据库的项目;③为已有用户解决常见问题。 其他说明:本文档不仅包含了基础的安装和配置流程,还提供了实际操作中可能遇到的问题及其解决方法,有助于提高使用者的实际操作能力。
基于SpringBoot+Vue的软件产品展示销售系统源码数据库文档.zip
《书戴嵩画牛》教学课件.pptx
20届智能车 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。