什么是xml:

众所周知,xml常用语数据存储和传输,文件后缀为 .xml;

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。

如何定义这些标记,既可以选择国际通用的标记语言如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML设计用来传送及携带数据信息,不用来表现或展示数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。而HTML语言则用来表现数据。可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

 

DOM4J:

通过DOM4J API和标准DOM接口具有并行访问功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,例如大名鼎鼎的hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.

 

-------------------------------------------------

DOM解析用例:

--------------------------------------------------

public class DOMforEm {

public static ArrayList<Employee> showEM() throws ParserConfigurationException, IOException, Exception{

ArrayList<Employee> list = new ArrayList<Employee>();

//1.得到DOM解析器的工厂实例

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

//2从工厂中获得DOM解析器

DocumentBuilder db = dbf.newDocumentBuilder();

//3把XML倒挂为一颗DOM树

Document doc = db.parse("employee.xml");

//4拿到节点集合

NodeList emList =doc.getElementsByTagName("em");

//5.遍历DOM树 ,循环节点信息

for(int i=0;i<emList.getLength();i++){

Employee emClass = new Employee();

//6.强转子节点为元素

Element em =(Element)emList.item(i);

//7.取得元素的属性值

String attrValue = em.getAttribute("id");

emClass.setNo(Integer.parseInt(attrValue));

//8循环每一个元素的子节点

         NodeList em2List = em.getChildNodes();        

         for(int j=0;j<em2List.getLength();j++){            

        Node item = em2List.item(j);        

//子节点不用强转

int type = item.getNodeType();

if(type==1){

String content = item.getTextContent();

String name = item.getNodeName();

if(name != null && name.equals("emname")){

emClass.setName(content);

}else if(name!= null && name.equals("job")){

emClass.setJob(content);

}else {

                 emClass.setSalary(content);

}

}

}

list.add(emClass);

}

return list;

}

public static void main(String[] args) {

try {

ArrayList<Employee> list = showEM();

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

--------------------------------------------------

DOM4J解析xml整理

 

xml解析异常1:

java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.

异常分析:

由于声明的Xml是UTF-8编码的,而转换的时候使用默认的编码是gbk的

===============================

xml解析异常2:

The processing instruction target matching "[xX][mM][lL]" is not allowed. activity_main.xml

异常分析:

XML头信息写在最前面,

<?xml version="1.0" encoding="UTF-8"?> 前面不能有空格

====================================

加载xml文件:

==================

加载String类型的报文:

Document document = DocumentHelper.parseText(xmlResult);====

===================================

加载xml文件:

Document doc = null;

/**

* DOM4J加载xml文件

*/

public void LoadXML(String path){        

SAXReader saxReader= new SAXReader();

try {

//read()的入参可以是File,InputStream,Reader,URL等多种方式....,用字节流加载防止中文乱码,很重要

doc = saxReader.read(path);

} catch (Exception e) {

e.printStackTrace();

}

}

=============================================

/**

* 保存XML文件

* @param path

*/

public void saveXML(String path){

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("UTF-8");

try {

XMLWriter writer = new XMLWriter(new FileWriter(path), format);

writer.write(doc);

writer.flush();

writer.close();

} catch (Exception e) {

e.printStackTrace();

}

}

=========================================

doc.asXML方法

将doc对象转化成xmlstring的格式,并可以将string打印出来。

拿到根节点对象

Element root =doc.getRootElement();

节点:

拿根节点对象: Element rootElem = document.getRootElement();

获取某节点的单个子节点:Element memberElem = root.element("节点名");

获取根节点下的所有的名为name子节点的集合并遍历:(遍历之前先判断有无子节点)

List nodes= root.elements("name");

for(Iterator it = nodes.iterator() ; it.hasNext() ; ){

Element elm = (Element) it.next();

.........

}

对某节点下所有的子节点进行遍历:

for(Iterator it = root.elementIterator() ; it.hasNext() ; ){

Element elm = (Element) it.next();

......

}

添加age子节点:

Element ageELm = newMenberElm.addElement("age");

删除子节点:

parentElm.remove(chaildElm);

Element.getParent().remove(Element);

==========================================

拿节点的内容1:

Element.getTextTrim()【忽略换行键】

Element.getText()【包含换行键】

若有子节点,则得到的String为空串"",遍历之前先判断否则空指针异常,例:

String text = root.getTextTrim();

if (!text.equals("")) {

System.out.println("根节点的内容是:"+text);

}else{

Iterator<Element> item = root.elementIterator();

int ii=1;//3遍历所有的元素

while(item.hasNext()){

..........

}

获取根节点下的name子节点的内容2:

String text = root.elementText("name");

设置/修改节点的内容:Element.setText("内容");

拿节点的名字 :Element.getName()

修改节点的名字 :Element.setName()================================================

属性:

获取某节点下的某属性(对象):

Atrribute attribute = root.attribute("size");

继而获取属性对象的值:

String text = attribute .getText();

也可以从节点对象取属性对象的值2:

Element.attributeValue("size");

 

遍历某节点的所有属性:

for(Iterator it = root.attributeIterator() ; it.hasNext() ; ){

Atrribute attribute = it.next();

String text = attribute .getText();

........

}

删除某属性:

Atrribute attribute = root.attribute("size");

root.remove(attribute);

//root.remove(root.attribute("size"));

 

添加节点属性 Element.addAttribute("language", "java");如果重复添加则覆盖,可当做修改操作

修改节点的值:Element.setText("值");

===============================================

 

 

 

XML—代码—DOM4J解析的更多相关文章

  1. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  2. xml的Dom4j解析规则

    一,xml的样本 <?xml version="1.0" encoding="utf-8"?> <contactList> <co ...

  3. java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class

    package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...

  4. [工作代码]dom4j解析实例

    工作中,我需要和另一个公司(A公司)共同开发一个模块,我写一个servlet接口,A公司携带xml格式的报文来访问.我采用流的形式读取,在处理后以流的形式写入,在返回(相应)给A公司. demo: p ...

  5. XML(四)dom4j解析XML

    使用dom4j须要导入jar包 jar包下载地址:http://pan.baidu.com/s/1o65jWRw 将dom4j-1.6.1.jar包导入Eclipse book2.xml <?x ...

  6. Dom4j解析xml

    public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...

  7. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  8. xml(3)--dom4j实现crud操作

    1.XML解析技术概述 (1)XML解析方式分为两种:dom和sax     dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种标准方 ...

  9. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

随机推荐

  1. 兵器簿之github的配置和使用

    1.注册一个github 账号,这个大家都懂得了啊 2.配置 (1 检查:进入终端,在用户目录下输入: ls -al ~/.ssh 得到下图代表本地没有配置过github 过. (2 创建一个目录,输 ...

  2. tomcat启动后,页面浏览时报错 Unable to compile class for JSP的解决方案【原创】

    问题描述: tomcat启动后,console正常,console中语句为: 信息: Server startup in 7291 ms   但浏览器访问首页面http://localhost:808 ...

  3. python转化字符串形式的json

    在使用python对字符串形式的json进行 json.loads() 的操作时,遇到了:JSONDecodeError: Invalid \escape,提示\无法excape,可以通过以下方式将字 ...

  4. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

  5. 字符串-回文-Manacher算法

    http://blog.csdn.net/zzkksunboy/article/details/72600679 https://segmentfault.com/a/1190000008484167 ...

  6. linux:用户及文件权限管理

    学习内容来自实验楼.莫烦python.CSDN 一.Linux 用户管理 1. 查看用户 who am i 或者who mom likes who -a:打印所有能打印的  who -d :打印死掉的 ...

  7. complexity_action

    大话数据结构 /* 顺序存储的结构 */ #define MAXSIZE 20 //存储空间初始分配量 typedef int ElemType; //ElemType类型根据实际情况而定,这里假设为 ...

  8. 2018/04/18 每日一学Linux 之 ssh关闭密码登录

    在平常工作中,常常需要关闭 SSH 的密码登录,只留 SSH 证书登录. 好处显而易见,避免了经常输入密码导致的密码泄露,和设置密码导致被暴力破解的可能性. -- 方法也很简单,首先 你是可以 登录 ...

  9. pycharm 使用激活补丁永久激活+汉化

    提供激活补丁激活方式(推荐使用-使用期到2100年,基本永久啦) 破解补丁激活 1.下载 https://pan.baidu.com/s/1GehNMTXagUxUEted1DT-Pg 密码:6689 ...

  10. Elasticsearch教程-从入门到精通(转)

    原文:http://mageedu.blog.51cto.com/4265610/1714522?utm_source=tuicool&utm_medium=referral 各位运维同行朋友 ...