最近闲着没事,简单整理一下java读写xml的方法,以前也就是匆匆忙忙的使用,没有认真的思考过,本人菜鸟,希望各位老鸟指正!
本来想总结一下常用的读写xml的四个方法,为了写程序方便,定义了接口,事与愿违,有时间以后补上吧!
定义接口如下:
public interface ParserXmlInterface
{
//创建xml
public void createXml(String path);
//解析xml
public void parserXml(String fileName);
//为dom4j xpath定义
public void xpathDom4j(String path);
}
1.Dom读写xml方法
public class DomParaserXmlImpl
implements ParserXmlInterface
{
private Document document;
// 实现接口生成xml方法
public void createXml(String path)
{
// 初始化DOM
this.initDocument();
// 创建元素,并添加节点
Element root = this.document.createElement("employess");
this.document.appendChild(root);
Element employee = this.document.createElement("employee");
Element name = this.document.createElement("name");
name.appendChild(this.document.createTextNode("gshzhou"));
employee.appendChild(name);
Element sex = this.document.createElement("sex");
sex.appendChild(this.document.createTextNode("male"));
employee.appendChild(sex);
Element age = this.document.createElement("age");
age.appendChild(this.document.createTextNode("25"));
employee.appendChild(age);
root.appendChild(employee);
try
{
// 确定要创建的哪一个 Factory 实现被命名为
TransformerFactory transFactory = TransformerFactory.newInstance();
// 将原树转换为结果树。可以在转换之间保留参数和输出属性
Transformer tf = transFactory.newTransformer();
// 创建带有DOM节点的新输入源
DOMSource domSource = new DOMSource(document);
// 设置转换中实际的输出属性。
tf.setOutputProperty(OutputKeys.INDENT, "yes");
// java.io 向文本输出流打印对象的格式化表示形式。
PrintWriter writer = new PrintWriter(new FileOutputStream(path));
// 从字节流构造充当结果的持有者
StreamResult result = new StreamResult(writer);
// 讲xml转换为目标结果。
tf.transform(domSource, result);
System.out.println("xml生成成功");
}
catch (Exception e)
{
System.out.println("生成xml时异常:" + e.getMessage());
}
}
// 实现接口解析xml
public void parserXml(String fileName)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db = factory.newDocumentBuilder();
document = db.parse(fileName);
NodeList employees = document.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 employeeMate = node.getChildNodes();
for( int k = 0; k < employeeMate.getLength(); k++)
{
System.out.println(employeeMate.item(k).getNodeName()
+ ":" + employeeMate.item(k).getTextContent());
}
}
}
System.out.println("DOM 解析完毕");
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("解析xml异常:" + e.getMessage());
}
}
// 初始化dom
private void initDocument()
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
this.document = builder.newDocument();
}
catch (ParserConfigurationException e)
{
System.out.println("初始化DOM异常>");
}
}
//方法是为Dom4j定义的接口,用xpath很方便 的找到节点的属性以及值。
public void xpathDom4j(String path)
{
}
}
2. dom4j 读写xml以及xpath的简单使用。
public class Dom4jParaserXmlImpl
implements ParserXmlInterface
{
//dom4j生成xml
public void createXml(String path)
{
Document document = DocumentHelper.createDocument();
Element employees = document.addElement("employees");
//第一个员工信息
Element employee = employees.addElement("employee");
employee.addAttribute("id", "gshzhou");
Element name = employee.addElement("name");
name.setText("gshzhou");
Element sex = employee.addElement("sex");
sex.setText("male");
Element age = employee.addElement("age");
age.setText("25");
//第二个员工信息
Element employee2 = employees.addElement("employee");
employee2.addAttribute("id", "mingr");
Element name2 = employee2.addElement("name");
name2.setText("mingr");
Element sex2 = employee2.addElement("sex");
sex2.setText("male");
Element age2 = employee2.addElement("age");
age2.setText("30");
try
{
Writer fileWrite = new FileWriter(path);
XMLWriter xmlWrite = new XMLWriter(fileWrite);
xmlWrite.write(document);
xmlWrite.close();
System.out.println("Dom4j生成xml成功。");
}
catch (IOException e)
{
System.out.println("Dom4j生成xml异常。" + e.getMessage());
}
}
//dom4j解析xml
public void parserXml(String fileName)
{
File inputXml = new File(fileName);
SAXReader saxReader = new SAXReader();
try
{
Document document = saxReader.read(inputXml);
Element employees = document.getRootElement();
for(Iterator i = employees.elementIterator(); i.hasNext(); )
{
Element employee = (Element)i.next();
for(Iterator j = employee.elementIterator(); j.hasNext(); )
{
Element node = (Element)j.next();
System.out.println(node.getName() + ":" + node.getText());
}
}
System.out.println("Dom4j解析成功.");
}
catch (DocumentException e)
{
System.out.println("dom4j解析xml异常:" + e.getMessage());
}
}
//Dom4j的一个亮点,使用xpath语法查找节点,快
public void xpathDom4j(String path)
{
SAXReader saxReader = new SAXReader();
try
{
Document document = saxReader.read(path);
Node root = document.selectSingleNode("/employees");
//Node root = document.getRootElement();
//取employees下id为gshzhou的节点
List list = root.selectNodes("employee[@id='gshzhou']");
System.out.println(list.size());
for(Object o : list)
{
Element e = (Element)o;
//attributeValue是读取节点的属性值
System.out.println("Node's attribute -> " + e.attributeValue("id"));
}
//取employees下所有的 employee节点
List list1 = root.selectNodes("employee");
//取employees节点下的employee节点下的name节点
List list2 = root.selectNodes("employee[@id='gshzhou']/name");
System.out.println("Node name -> " + ((Element)list2.get(0)).getName()); //输出子节点名字
System.out.println("Node value -> "+((Element)list2.get(0)).getText());//输出子节点内容
}
catch (DocumentException e)
{
e.printStackTrace();
}
}
}
说明:Dom4j用到了 dom4j-1.6.1.jar 和 jaxen-1.1-beta-6.jar 都能在下载的dom4j包中找到。
分享到:
相关推荐
DOM4J是基于DOM模型的,但相比标准的Java DOM,它提供了更加简洁和高效的API,使得开发者在处理XML文档时更加方便。 XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于网络数据交换、配置...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
**使用DOM4J对XML的读写** DOM4J是一个非常强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得简单易行。相较于JDOM,DOM4J确实提供了更多的功能,虽然在学习曲线方面...
在Java中,处理XML有多种方式,其中DOM(Document Object Model)和DOM4J是两种常用的方法。下面将详细介绍这两种方法以及如何在Java中使用它们来读写XML。 1. DOM解析器: DOM是一种基于树型结构的XML文档模型,它...
5. **DOM4J与JAXB(Java Architecture for XML Binding)对比**:虽然两者都可以处理XML,但DOM4J更侧重于底层的XML操作,而JAXB则用于将Java对象和XML之间进行自动转换,更适用于对象和XML映射的需求。 6. **示例...
总结,DOM4J是Java开发中处理XML文档的强大工具,它的易用性和灵活性使得XML操作变得简单。无论是读取、写入还是搜索XML,DOM4J都能提供高效的方法。在实际项目中,结合源码阅读和使用DOM4J工具,能够更深入地理解和...
通过学习和熟练使用DOM4J,开发者能够更高效地在Java项目中处理XML数据。不过要注意,DOM4J基于DOM模型,对于大型XML文件,内存消耗可能较大,因此在处理大文件时应考虑使用SAX或StAX等流式解析器。
- DOM4J是一个基于Java的XML处理库,它扩展了Java的标准DOM API,提供了更简单和更直观的方式来处理XML文档。 - 它的核心思想是使用元素(Element)、属性(Attribute)和文本(Text)等对象来构建和操作XML文档,...
### Java使用DOM4J读取XML知识点解析 #### 一、概述 在Java开发中,处理XML文件是一项常见的任务。DOM4J是一个简单且功能强大的Java库,用于处理XML文档。它提供了类似于DOM的API,但更为轻量级且易于使用。本篇将...
本篇文章将深入探讨如何利用DOM4J库来实现XSD对XML文档的校验,以确保XML文件符合预先设定的数据结构规则。 首先,理解XSD的作用至关重要。XSD文件定义了XML文档的元素、属性、数据类型以及它们之间的关系。通过...
DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了对XML文档的全面支持。 DOM4J库的核心功能包括: 1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即...
在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式。为了处理XML文档,Java提供了多种API,...在提供的"testxml"文件中,你可以尝试用这四种方式分别解析并操作XML,对比它们的使用和效果。
**DOM4J库详解** DOM4J是一款强大的Java XML API,它提供了丰富的功能,使得在Java应用程序中处理XML文档变得简单而高效。...结合其轻量级的设计和对XPath的支持,DOM4J成为了Java开发者的首选XML库之一。
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的方式来解析、创建、修改和操作XML数据。在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你...
Java中的DOM4J库是一个非常流行的XML处理工具,它提供了灵活且高效的API来解析、创建、修改和查询XML文档。DOM4J的名字来源于DOM(Document Object Model)和JDOM,它融合了两者的优势,提供了更丰富的功能和更好的...
总结来说,这个“dom4j的Java工程”是一个学习和实践DOM4J的绝佳资源。通过研究其中的代码,你可以掌握DOM4J处理XML的基本技巧,并理解如何将其应用到实际的Java项目中,以实现XML文件的高效管理和操作。无论是新手...
6. **Namespace支持**:DOM4J提供了对XML命名空间的全面支持,可以方便地处理包含命名空间的XML文档。 7. **DocumentType支持**:对于包含DOCTYPE声明的XML文档,DOM4J可以处理这些声明,并提供对应的DocumentType...
### Dom4J生成XML的完整方法详解 在Java开发领域,处理XML文档是常见的需求之一。Dom4J作为一款优秀的Java XML API,...掌握以上知识点,开发者即可熟练运用Dom4J生成复杂的XML文档,满足项目中对XML数据处理的需求。
2.Java方面,使用dom4j对xml进行操作,包括节点的读取,添加,修改,删除。 3.Flex方面,使用DataGrid呈现数据;使用RemoteObject构建和Java的通信;使用到了验证控件Validator;使用了CSS样式对Alert对话框进行了...
这种方式非常适合那些需要对XML文档进行多次访问或修改的应用场景。 #### 标题解释 标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到...