dom4j组装xml 以及解析xml:

1.下载dom4j的jar包,地址:https://dom4j.github.io/

2.java代码:

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException; /**
* dom4j解析xml
* @author lyc
*
*/
public class DOM4J { public static void main(String[] args) {
DOM4J dom4j= new DOM4J();
try {
//生成xml
dom4j.objectToXml();
//解析xml
//dom4j.xmlToObject();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 获取并解析xml格式文件为object
public void xmlToObject() throws ParserConfigurationException, DocumentException, SAXException, IOException{
/**
* 1.解析xml文件
*/
SAXReader saxReader = new SAXReader();
//将获取的xml 转化为document 文档
//这里使用了File当然也可以使用URL()从指定url获取xml并进行解析
//document从文件中解析出来
//Document document = saxReader.read(new File("src/1.xml")); /**
* 2.解析xml字符串
*/
//解析xml字符串
//document从字符串中解析出来
String xml = "<?xml version='1.0' encoding='UTF-8'?><student name='zhangsan'><courses><yuwen>语文</yuwen><shuxue>数学</shuxue></courses><courses><yingyu>英语</yingyu><huaxue>化学</huaxue></courses></student>";
Document document = DocumentHelper.parseText(xml); // 将字符串转为XML
// 获取根元素
Element root = document.getRootElement();
// 根元素名称
System.out.println("reservationList Root----: " + root.getName()); // 获取所有子元素
List<Element> childList = root.elements(); //解析xml串
System.out.println(childList.get(0).element("yuwen").getTextTrim());
System.out.println("courses child 长度:" + childList.size());
for(Element e : childList){
List<Element> list = e.elements();
for(Element e1 : list){
System.out.println(e1.getTextTrim());
}
System.out.println("==========");
} System.out.println("total reservation child count: " + childList.size());
System.out.println("第一个reservation的quotationId节点值:"+childList.get(0).element("quotationId").getTextTrim());
for(Element e : childList){
/*Element helloElement = e.element("quotationId");
System.out.println(helloElement.getTextTrim());*/ Element insurantListE = e.element("insurantList");
List<Element> insurantList = insurantListE.elements();
System.out.println("total insurant child count: " + insurantList.size());
for(Element e1 : insurantList){
Element helloElement1 = e1.element("insurantName");
System.out.println(helloElement1.getTextTrim());
}
} /*// 获取特定名称的子元素
List<Element> childList2 = root.elements("reservation");
Element helloElement = root.element("quotationId");
System.out.println("hello child: " + childList2.size());
// 获取特定名称的子元素的值
System.out.println("hello----"+childList2.get(0).getText());
System.out.println("hello----"+helloElement.getText().trim());
System.out.println("迭代输出-----------------------");*/ // 迭代输出
/*for (Iterator iter = root.elementIterator(); iter.hasNext();)
{ // 获取根目录下的元素
Element e = (Element) iter.next();
// 获取元素对应的值
System.out.println(e.getText());
// 元素的属性个数
System.out.println(e.attributeCount());
//获取元素的第一个属性的名称
System.out.println(e.attribute(0).getName());
//获取元素的第一个属性的值
System.out.println(e.attribute(0).getValue());
//获取元素的第二个属性的名称
System.out.println(e.attribute(1).getName());
//获取元素的第二个属性的值
System.out.println(e.attribute(1).getValue());
//按照属性名称获取属性值
System.out.println("are you ok :"+e.attributeValue("age"));
System.out.println("are you ok :"+e.attributeValue("name"));
}*/ // 使用DOMReader将xml转化为object
/*System.out.println("用DOMReader-----------------------");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// 注意要用完整类名
//将获取的xml 转化为document 文档
org.w3c.dom.Document document2 = db.parse(new File("F:/student2.xml")); DOMReader domReader = new DOMReader(); // 将JAXP的Document转换为dom4j的Document
Document document3 = domReader.read(document2); Element rootElement = document3.getRootElement(); System.out.println("Root: " + rootElement.getName());*/
} // 将对象组装成xml格式文件并保存
public void objectToXml ()throws Exception{
// 第一种方式:创建文档,并创建根元素
// 创建文档:使用了一个Helper类
Document document = DocumentHelper.createDocument();
// 创建根节点并添加进文档
Element root = DocumentHelper.createElement("student");
document.setRootElement(root); // 第二种方式:创建文档并设置文档的根元素节点
Element root2 = DocumentHelper.createElement("student");
Document document2 = DocumentHelper.createDocument(root2);
// 给元素添加属性
root2.addAttribute("name", "zhangsan"); Element e = root2.addElement("courses");
/*Map<String,Object> map1 = new HashMap<String,Object>();
Map<String,Object> map2 = new HashMap<String,Object>();
List<Map<String,Object>> list = new ArrayList(); map2.put("yuwen", "语文");
map2.put("shuxue", "数学");
list.add(map1);
list.add(map2);*/ /*for(Map map : list){
Element courseElement = e.addElement(map.entrySet().iterator().next().toString());
courseElement.setText(map.get(map.entrySet().iterator().next().toString()).toString());
}*/ Element yuwenElement = e.addElement("yuwen");
Element shuxueElement = e.addElement("shuxue"); yuwenElement.setText("语文");
shuxueElement.setText("数学"); /**
* 1.生成xml字符串
*/
//生成xml字符串方式一:
String xmlText = document2.asXML();
System.out.println(xmlText); //生成xml字符串方式二:
/*OutputFormat format1 = OutputFormat.createCompactFormat(); //createPrettyPrint() 层次格式化
StringWriter writer = new StringWriter();
XMLWriter output = new XMLWriter(writer, format1);
output.write(document);
System.out.println();
System.out.println("xmlToString:"+writer.toString());*/ /**
* 2.生成xml文件
*/
/* // 添加子节点:add之后就返回这个元素
Element helloElement = root2.addElement("hello");
Element worldElement = root2.addElement("world");
//给元素添加属性key-value
worldElement.addAttribute("age","12");
worldElement.addAttribute("name","www");
helloElement.addAttribute("age","13");
helloElement.addAttribute("name","wws");
//元素的节点的值
helloElement.setText("hello Text");
worldElement.setText("world text");*/
// 输出
// 输出到控制台
XMLWriter xmlWriter = new XMLWriter();
xmlWriter.write(document); //输出到文件
//其中的" "表示格式,true参数表示另起一行,gb2312表示编码,如果不写这个参数则默认utf-8编码
//1、OutputFormat format=new OutputFormat(" ",true,"gb2312");
//生成压缩格式、紧凑格式的xml 其中的compactFormat 翻译:压缩格式
//2、 OutputFormat format = OutputFormat.createCompactFormat();
//调用静态方法创建一个没有格式的打印方式
//3、 OutputFormat format = OutputFormat.createPrettyPrint();
//format.setEncoding("gb2312"); // 设置编码
OutputFormat format = new OutputFormat(" ", true);// 设置缩进为2个空格,并且另起一行为true
XMLWriter xmlWriter2 = new XMLWriter(
new FileOutputStream("C:/Users/lyc/Desktop/student1.xml"), format);
xmlWriter2.write(document2);
xmlWriter2.flush();
xmlWriter2.close(); // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白,调用close() 方法释放资源
XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("C:/Users/lyc/Desktop/student2.xml"),
format);
xmlWriter3.write(document2);
xmlWriter3.flush();
xmlWriter3.close();
} }

3.需要解析的xml内容:
1.xml:(自己定义xml文件),例如:

<?xml version="1.0" encoding="UTF-8"?>

<student name="zhangsan">
<courses>
<yuwen>语文</yuwen>
<shuxue>数学</shuxue>
</courses>
</student>

4.生成xml文件:

student1.xml:

<?xml version="1.0" encoding="UTF-8"?>

<student name="zhangsan">
<courses>
<yuwen>语文</yuwen>
<shuxue>数学</shuxue>
</courses>
</student>

student2.xml:

<?xml version="1.0" encoding="UTF-8"?>

<student name="zhangsan">
<courses>
<yuwen>语文</yuwen>
<shuxue>数学</shuxue>
</courses>
</student>

dom4j组装xml 以及解析xml的更多相关文章

  1. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  2. Dom生成Xml和解析Xml

    xml这样的文件格式在非常多时候都是非常适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比較重要了.在dom中是把每个元素都看做是一个节点Node的,全部页面上的属性.元素等 ...

  3. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  4. Python使用xml.dom解析xml

    在菜鸟教程上找了个关于电影信息的xml类型的文档,用python内置的xml.dom来解析提取一下信息. 先复习一下xml概念: XML 指可扩展标记语言(EXtensible Markup Lang ...

  5. 基于Woodstox的StAX 2 (Streaming API for XML)解析XML

    StAX (Streaming API for XML)面向流的拉式解析XML,速度快.占用资源少,非常合适处理大数据量的xml文件. 详细教程和说明可以参见以下几篇文章: 使用 StAX 解析 XM ...

  6. Python—使用xml.sax解析xml文件

    什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...

  7. 对DOM,SAX,JDOM,DOM4J四种方法解析XML文件的分析

    1.DOM 与平台无关的官方解析方式 DOM是一次性把xml文件加载到内存中,形成一个节点树 对内存有要求 2.SAX java提供的基于事件驱动的解析方式 每次遇到一个标签,会触发相应的事件方法 3 ...

  8. [java开发篇][dom4j模块]遍历,解析xml

    package com.softwinner.performance.benchmark; /** * Created by Administrator on 2017/7/21. */ import ...

  9. SqL读取XML、解析XML、SqL将XML转换DataTable、SqL将XML转换表

    DECLARE @ItemMessage XML )) SET @ItemMessage=N' <ReceivablesInfos> <ReceivablesList> < ...

随机推荐

  1. DSAPI多功能组件编程应用-DS提示气泡

    首先下载DSAPI.dll.并在项目中引用. 该功能包括在DSAPI1.0.1.1及更高版本号,DLL请到本人资源里查找. Private Sub Button1_Click(sender As Ob ...

  2. Unsupported major.minor version 51.0问题的解决

    在java编程的过程中,当用myeclipse软件打开别人写的代码时,遇到Unsupported major.minor version 51.0此类问题,实在是令人痛苦不堪.弄了整整一晚才搞清楚,我 ...

  3. 【Android】Android程序自己主动更新

    App自己主动更新的步骤可分为三步: 检查更新(假设有更新进行第2步,否则返回) 下载新版的APK安装包 安装APK 以下对这三步进行解释.当中会穿插相应代码.App自己主动更新的这三步所有被封装到了 ...

  4. spring mvc 插入一条数据 返回该数据的主键编号

    import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.suppo ...

  5. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  6. 神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。

    转自:http://blog.csdn.net/jeryjeryjery/article/details/72649320 这两天用Python来实现手写数字识别,刚开始用原始数据进行训练,结果预测结 ...

  7. OKHttp使用简介

    现在android网络方面的第三方库很多,volley,Retrofit,OKHttp等,各有各自的特点,这边博客就来简单介绍下如何使用OKHttp. 梗概 OKHttp是一款高效的HTTP客户端,支 ...

  8. sicily 1146 采药 (动规)

    打代码不走心会掉坑里的.. 下边是代码: //1146.采药 //t表示总时间 //m表示草药数 //w表示采药时间 //v表示草药价值 #include <iostream> using ...

  9. 51nod 1785 数据流中的算法 (方差计算公式)

    1785 数据流中的算法 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题   51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠 ...

  10. HOJ 1867 经理的烦恼 【 树状数组 】

    题意:给出一个区间,求这个区间里面素数的个数 这道题wa了好多次---是因为add操作没有写对 每次更新的时候,应该先判断没有加上y是不是质数,加上了y是不是质数 如果从质数变成不是质数,那么add( ...