import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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;
import org.xml.sax.SAXException;
/**
* 解析XML文档
* @param fileName 文件全路径名称
*/
public class DomDemo implements XmlDocument
{
private String fileName;
private Document document;
public void init()throws Exception
{
try
{
DocumentBuilderFactory factory=DocumentBuilderFactory .newInstance();
DocumentBuilder db=factory.newDocumentBuilder();
this.document=db.newDocument();
}
catch(ParserConfigurationException e)
{
e.printStackTrace();
}
}
//创建xml
public void createXml(String fileName)throws Exception
{
try
{
//创建根元素
Element root=this.document.createElement("employees");
this.document.appendChild(root);
//创建子元素
Element employee=this.document.createElement("employee");
//添加元素的属性
Element name=this.document.createElement("name");
name.appendChild(this.document.createTextNode("xiaohua"));
//将元素添加到子元素中
employee.appendChild(name);
Element sex=this.document.createElement("sex");
sex.appendChild(this.document.createTextNode("m"));
employee.appendChild(sex);
Element age = this.document.createElement("age");
age.appendChild(this.document.createTextNode("30"));
employee.appendChild(age);
//将子元素添加到根元素中
root.appendChild(employee);
TransformerFactory tf = TransformerFactory.newInstance();
//此抽象类的实例能够将源树转换为结果树
Transformer transformer = tf.newTransformer();
// 创建带有 DOM 节点的新输入源
DOMSource source = new DOMSource(this.document);
// 设置转换中实际的输出属性
transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
//充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记
StreamResult result = new StreamResult(pw);
//将 XML Source 转换为 Result
transformer.transform(source, result);
System.out.println("生成XML文件成功!");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
//解析xml
public void pareser(String fileName)throws Exception
{
try
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(fileName);
NodeList employees=doc.getChildNodes();
for(int i=0;i<employees.getLength();i++)
{
Node employee=employees.item(i);
NodeList employeeInfo=employee.getChildNodes();
for(int j=0;j<employeeInfo.getLength();j++)
{
Node node=employeeInfo.item(j);
NodeList list=node.getChildNodes();
for(int k=0;k<list.getLength();k++)
{
System.out.println("节点名称:"+list.item(k).getNodeName() +"----->"+"值:"+list.item(k).getTextContent());
}
}
}
System.out.println("解析完毕");
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
} catch (SAXException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args)throws Exception
{
DomDemo d=new DomDemo();
d.init();
// d.createXml("e:\\employees.xml");
d.pareser("e:\\employees.xml");
}
}
【小结】:
1. 为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU
2. 使用dom的解析步骤:
a 获取解析Document对象
b.进行三层遍历。(根节点 节点元素 节点 )
c 获取节点名称和值
3.生成步骤:
a.创建doucumnet对象
b.构造数
c创建 TransformerFactory,并由它产生Transformer对象。并设定有关的属性
d.产生DOMSource对象
e.产生StreamResult
f.调用 transformer.transform(source, result);
将原树转化为结果树
分享到:
相关推荐
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j 生成 XML 文档非常简单。首先,我们需要创建一个 Document 对象,然后添加元素和属性。下面是一个生成 XML 文档的...
- **数据交换**: 在不同的系统之间交换XML格式的数据,DOM4J可以轻松解析和生成XML文档。 - **配置文件解析**: 许多应用使用XML作为配置文件的格式,DOM4J可以方便地读取和更新这些配置信息。 - **Web服务**: 在SOAP...
4. **XPath支持**:DOM4J支持XPath表达式,这允许开发者根据XPath查询XML文档中的特定节点,极大提高了代码的可读性和效率。 5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析...
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
这篇博客()可能详细介绍了如何使用DOM4J来生成和解析XML文件,这对于处理XML文档的开发人员来说是非常有用的工具。 **1. 生成XML文件** 生成XML文件主要涉及以下步骤: - **创建Document对象**:DOM4J通过`...
本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...
DOM4J解析XML文档: DOM4J通过构建DOM树(Document Object Model)来解析XML。DOM模型是一种将XML文档转换为内存中对象树的表示方式。在DOM4J中,我们可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建`...
DOM4J是一个Java库,它为处理XML提供了强大的功能,包括读取、写入、修改和操作XML文档。这个库以其灵活性、效率和易用性而受到开发者的青睐。DOM4J是基于DOM(Document Object Model)的,但它通过提供更高级别的...
在这个项目中,我们利用DOM4J来解析XML文件,并通过Java的反射机制将解析出的信息存储到特定的类中。 首先,我们需要了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于数据交换和结构化...
使用DOMParser解析XML文档,首先需要创建一个DOMParser实例,然后调用其`parseFromString()`方法,传入XML字符串作为参数。例如: ```javascript let parser = new DOMParser(); let xmlString = "<root>...
DOM4J是一个强大的Java...总结来说,DOM4J是一个功能强大、灵活的XML处理工具,它提供了丰富的功能来解析、操作和生成XML文档,广泛应用于各种Java项目中。其高效、易用的特性使其成为Java开发者处理XML的首选库之一。
标签"解析XML和生成XML的必备选择"表明,DOM不仅适用于生成XML,也常用于解析XML文档。解析XML时,`DocumentBuilder`会构建一个DOM树,然后可以通过DOM API查询和修改树中的节点。 总结一下,Java DOM提供了一套...
通过使用XML DOM,开发者可以更加高效、灵活地创建和管理XML文档。本文介绍了XML DOM的基本概念、主要对象以及如何使用XMLDOMDocument对象创建XML文档的方法。掌握了这些知识,你就可以更轻松地在各种应用场景中使用...
Dom4J作为一款优秀的Java XML API,以其简洁、高效的特点,在生成、解析和操作XML文档方面表现突出。本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至...
使用DOM方法读取XML文件,需要创建DocumentBuilderFactory对象,获取DocumentBuilder对象,然后解析XML文件得到Document对象。最后,使用Document对象的getElementsByTagName方法获取指定标签的节点列表,并遍历节点...