### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来处理XML文件,包括SAX、DOM以及更现代的JSoup等。本文将详细介绍如何使用Java标准库中的DOM API来读取与写入XML文件。 #### 二、DOM API介绍 DOM(Document Object Model)是W3C推荐的标准,它提供了一种与平台和语言无关的方式访问和更新文档内容、结构和样式的方法。在Java中,我们通常使用`javax.xml.parsers`包下的类来创建DOM树,并通过`org.w3c.dom`包中的接口来操作这个树。 #### 三、读取XML文件 为了读取XML文件,我们需要创建一个`Document`对象,这通常是通过`DocumentBuilder`实现的。下面是一个简单的例子: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File("student.xml")); ``` 1. **创建DocumentBuilderFactory**:这是创建`DocumentBuilder`的第一步。 2. **创建DocumentBuilder**:`DocumentBuilderFactory`用于创建`DocumentBuilder`实例,该实例负责加载XML文件并将其解析为`Document`对象。 3. **解析XML文件**:使用`DocumentBuilder`的`parse()`方法解析XML文件。 #### 四、写入XML文件 一旦我们有了`Document`对象,就可以对其进行修改或创建新的元素节点,然后将整个文档写回文件。以下是一个简单的示例: ```java // 创建Document对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); // 创建根节点 Element root = doc.createElement("students"); doc.appendChild(root); // 添加子节点 Element student = doc.createElement("student"); root.appendChild(student); Element name = doc.createElement("name"); name.setTextContent("张三"); student.appendChild(name); // 输出XML到文件 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new FileOutputStream("student.xml")); transformer.transform(source, result); ``` 1. **创建Document对象**:通过`DocumentBuilder`创建一个新的空文档。 2. **创建根节点**:使用`createElement`方法创建根节点,并将其添加到文档中。 3. **添加子节点**:创建子节点并设置文本内容,然后将它们添加到父节点下。 4. **输出XML到文件**: - 创建`TransformerFactory`和`Transformer`实例。 - 设置输出格式(例如缩进),以使输出的XML更易读。 - 使用`DOMSource`和`StreamResult`指定输入输出源。 - 调用`transform`方法完成转换。 #### 五、示例代码解析 在提供的部分内容中,可以看出作者正在实现一个名为`UpdateAndReadXml`的类,用于更新和读取XML文件。这里重点分析几个关键函数: - `getCurrentPath()`:获取当前路径。 - `addElement()`:向文档中添加新元素。 - `getBuilder()`:获取`DocumentBuilder`实例。 - `outputXml()`:将`Document`对象输出为XML文件。 #### 六、总结 通过上述讲解,我们可以看到使用Java的DOM API读取和写入XML文件的基本流程。这种方式虽然简单直观,但在处理大型文件时可能会遇到性能问题。对于大型文件或更高级的需求,可以考虑使用其他技术,如SAX或StAX。希望本文能帮助读者更好地理解和应用Java中的XML处理技术。



















无论是读还是写xml文件,都离不开文档解析器DocumentBuilder
通过文档解析器工厂类(DodumentBuilderFactory)来实例化文档解析器。
************************************************************
******************DocumentXml*******************************
************************************************************
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
* @author Administrator
*
*/
public class UpdateAndReadXml {
private static String filename="student.xml";
/*
* 获取当前文件路径
* @return
public static String getCurrentPath(){
File directory=new File(".");
File path=null;
try {
path=new File(directory.getCanonicalPath());
path.mkdir();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(path!=null)
return path.getPath()+File.separator;
else
return File.separator;
}
/*
* 给节点添加元素
* @return
* @param doc文档
* @param parent父节点
* @param tagName节点名称
* @param value节点内容
* @throws Exception
*/
public static Element addElement(Document doc,Node parent,String tagname,String value){
Element e=doc.createElement(tagname);
if(null!=value){
e.setTextContent(value);//两种设置节点内容的效果是一样的
//Text text=doc.createTextNode(value);
剩余9页未读,继续阅读


- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大学生网络安全教育体系构建研究.docx
- IPMP国际项目管理知识考核笔试测验试题.doc
- 谌欣球毕业设计轴箱凹槽铣床plc改造文档.doc
- C语言程序设计方案重要知识点.docx
- sql2000安装失败原因大全.doc
- 奶牛数字化虚拟仪器测控网络USB的通信设计.docx
- PDMS三维设计方案软件在热控电缆设计方案优化中的应用.doc
- linuxNandFlashdriver超详细研究.doc
- 医院智能化系统集成研究.docx
- 公路工程施工项目管理问题研究.docx
- 数据库系统概论(第四版)课本答案.doc
- db46t2692013农产品流通信息追溯建设与管理规范.doc
- 迈向2.0时代的天津市基础教育信息化调查研究.docx
- 分众分类中的网络资源分类的标签过滤技术评价.docx
- 网络基本知识OS七层模型.ppt
- 网络传播中的信息利用新技术.docx


