- 浏览: 66390 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (113)
- oracle数据 (2)
- eclipse (3)
- 工具类使用 (14)
- 分隔符 (1)
- socket (1)
- ServletContextListener (1)
- String (3)
- StringUtils工具类 (2)
- springboot拦截器 (1)
- 页面 (2)
- map (1)
- 密码加密 (3)
- 缓存 (1)
- 文件上传 (1)
- 算法 (3)
- jquery (1)
- DateFormatUtils (1)
- xml (2)
- ftp (1)
- 接口 (3)
- 公钥私钥 (1)
- sigar (1)
- 前端 (2)
- lang3 (1)
- 定时器 (1)
- java基础 (13)
- javaBean (1)
- 工具类 (2)
- 插件 (1)
- 数据库 (2)
- 项目 (4)
- springboot (6)
- java集合 (1)
- 测试 (1)
- thymeleaf (3)
- mysql (7)
- 分布式 (1)
- idea (1)
- TCP (1)
- 微服务 (1)
- 高并发 (3)
- redis (1)
- 多线程 (2)
- SpringCloud (1)
- spring (1)
- 1111 (0)
- 开源 (1)
- npm (1)
最新评论
一:构建dom4j树(表示为Document 元素)
常用方法:
方式一:直接创建所有元素:dom4j为我们准备了工具类DocumentHelper ,该类的所有的方法都是静态方法,用来创建xml文档的各个组成部分。
1.1.1创建Document 和Element对象:
Document doc=DocumentHelper.createDocument();
Element eltRoot=DocumentHelper.createElement(“student”);
doc.setEltRootElement(eltRoot);
1.1.2或者先准备好根元素,使用有参数的构造方法创建Document对象。
Element eltRoot=DocumentHelper.createElement(“student”);
Document doc=DocumentHelper.createDocument(eltRoot);
1.2:添加节点和设置节点内容:
方法:Branch 接口中定义的方法;
public Element addElemen(String name) //以指定的name 为当前节点创建一个子节点,并返回新节点的引用
public void setText(String text) //将content设置为节点的内容
示例如下:
Element eltName=eltRoot.addElement(“name”);
Element eltAge=eltRoot.addElement(“age”);
eltName.setText(“张三”);
eltAge.setText(“18”);
1.3:添加属性
方法:public Element addAttribute(String name,String value)
示例如下:
eltRoot.addAttribute(“sn”,”01”);
方式2:
2.1:org.dom4j.io提供了两个类:SAXReader和DOMReader,前者从一个现有的w3c DOM树构建dom4j树,而SAXReader则使用SAX解析器,从不同的输入源构建dom4j树。
2.1.1: 使用 SAXReader 构建dom4j文档对象:示例如下:
SAXReader saxReader=new SAXReader();
File file=new File(“student.xml”);
Document doc=saxReader.read(file);
2.2.1:使用DOMReader 构建dom4j 文档对象.
DocumentBuilderFactory dbf=new DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
File file=new File(“student.xml”);
org.w3c.dom.Document document=db.parse(file);
DOMReader domReader=new DOMReader();
org.dom4j.Document doc=domReader.read(document);
访问根节点:
Element root=doc.getRootElement();
访问节点:
访问所有节点:
java.util.List childrenList=elt.elements();
访问指定名称的所有节点
java.util.Liat childrenList=elt.elements(“student”);
访问指定名称第一个节点
Element eltChild=elt.element(“student”);
要迭代某个元素的所有子元素:
for(java.util.Iterator it=root.elementIterator();it.hasNext()){
Element element =it.hasNext();
……
}
Dom4j 中集成了对XPath的支持。在选择节点时,可以直接使用XPath 表达式,例如:
要选择例子文件 students.xml中的所有的<name>元素,代码如下:
java.util.List l=root.selectNodes(“//name”);
要选择属性sn的值等于01的<student>元素,代码如下:
java.util.List l=root.selectNodes(“//student[@sn=’01’]”);
注意:为了能够编译执行上述使用XPath表达式的代码,需要配置dom4j 安装包中自带的jaxen包,你也可以从http://sourceforge.net/products/jaxen/上下载jaxen。jaxen是一个用java开发的XPath引擎,用于配合各种基于XML的对象模型,如DOM,dom4j和JDOM。在dom4-1.6.1 目录下,有一个lib 子目录,其中有个jaxen-1.1-beta-6.jar文件,需要在classpath环境变量中配置该文件的全路径名。
访问属性:
要得到某个元素的所有属性,,如下:
java.util.List attrList=elt.attributes();
要得到指定的属性,如下:
Attribute attr=elt.attribute(“sn”);
要得到某个属性的值;如下:
String attrValue=elt.attributeValue(“sn”);
删除节点和节点的属性:
要删除某个元素::可以用Branch接口中定义的remove()方法,如下:
Element eltStu=root.element(“student”);
root.remove(eltStu);
要删除某个属性;如下:
elt.remove(elt.attribute(“sn”));
输出文档:
对象:XMLWriter 实例方法:write(Document doc)
常用的几种构造方法总结:
1:无参数:
2:字节流参数
3:字符流参数。
4:文档输出格式类参数。
示例代码1:
输出文档内容到控制台
XMLWriter xw=new XMLWriter();
xw.write(doc);
示例代码2:
输出文档内容到文件。构造XMLWriter 对象的时候,可以传递字节流参数。其底层代码设置了自动刷新机制。
XMLWriter xw=new XMLWriter(new java.io.FileOutputStream(“student.xml”));
xw.write(doc);
示例代码3:
构造XMLWriter 对象的时候,可以传递java.io.Writer对象。
XMLWriter xw=new XMLWriter(new java.io.FileWriter(“student.xml”));
xw.write(doc);
xw.close();
注意:使用java.io.Writer对象构建的XMLWriter对象,则没有设置自动刷新机制,所以在调用write()方法之后,还要调用xw.close()或者xw.flush()方法。并且XMLWriter 继承自org.xml.sax.helpers.XMLFilterImpl类。它所提供的close()和flush()方法只是其内部java.io.Writer 对象的flush()和close()方法的封装方法。
示例代码4:
构造XMLWriter 对象的时候,可以传递文档输出格式类org.dom4j.io.OutputFormat,利用这个类,可以设置输出文档的字符编码,设置行分割符以及控制使用的缩进字符串等。
下面的代码输出格式使用4个空格作为缩进字符串,元素之间添加新行。
OutputFormat outFmt=new OutputFormat(“ ”,true);
XMLWriter xw=new XMLWriter(outFmt);
xw.write(doc);
下面的代码采用美化的格式输出文档,设置字符串编码为GB2312,并且用4个空格作为缩进。
OutputFormat outFmt=OutputFormat.createPrettyPrint();
outFmt.setEncoding(“GB2312”);
outFmt.setIndent(“ ”);
XMLWriter xw=new XMLWriter(outFmt);
xw.write(doc);
dom4j的名称空间 信息api
常用的方法有8个。
dom4j在Element和Attribute 接口中定义了获取名称空间信息的方法,这些方法和JDOM中的方法相同。如下所示:
public java.lang.String getNamespacePrefix()
该方法返回元素(属性)的名称空间前缀
public java.lang.String getNamespaceURI()
该方法返回元素(属性)的名称空间URI
public java.lang.String getName()
该方法返回元素(属性)的本地名
public java.lang.String getQualifiedName()
该方法返回元素(属性)的限定名
public Namespace getNamespace()
该方法返回元素本身的名称空间
public java.util.List additionalNamespaces()
返回某元素上附加的名称空间声明列表,列表中的每一个对象都是Namespace类型。这个类的方法提供了两个方法分别获得名称空间前缀和本地名。如下:
public java.lang.String getPrefix()
该方法返回名称空间前缀。
public java.lang.String getURI()
该方法返回名称空间的URI。
---------------------------------------------------
DOM4J解析技术
一. Document对象相关
(1) 读取XML文件,获得document对象
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File(emp.xml"));
(2) 解析XML形式的文本,得到document对象
eg ->
String text = "元素";
Document document = DocumentHelper.parseText(text);
(3) 主动创建document对象
eg ->
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点
二. 节点相关
(1) 获取文档的根节点.
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File(emp.xml"));
(2) 取得某节点的单个子节点
eg ->
Element memberElm=root.element("member");// "member"是节点名
(3) 取得节点的文字
eg ->
DString text=memberElm.getText();
或者:
eg ->
String text=root.elementText("name");//这个是取得根节点下的name字节点的文字
(4) 取得某节点下名为"member"的所有字节点并进行遍历
eg ->
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next(); // do something
}
(5)对某节点下的所有子节点进行遍历
eg ->
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next(); // do something
}
(6) 在某节点下添加子节点
eg ->
Element ageElm = newMemberElm.addElement("age");
(7)设置节点文字.
eg ->
ageElm.setText("29");
(8) 删除某节点
eg ->
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
(9)添加一个CDATA节点
eg ->
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
contentElm.clearContent(); //清除节点中的内容,CDATA亦可
三 . 属性相关
(1)取得某节点下的某属性
eg ->
Element root=document.getRootElement();
Attribute attribute=root.attribute("size");// 属性名name
(2)取得属性的文字
eg ->
String text=attribute.getText();
或者: eg ->
String text2=root.element("name").attributeValue("firstname"); //这个是取得根节点下name字节点的属性firstname的值.
(3)遍历某节点的所有属性
eg ->
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
(4)设置某节点的属性和文字
eg ->
newMemberElm.addAttribute("name", "sitinspring");
(5) 设置属性的文字
eg ->
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
(6)删除某属性
eg ->
Attribute attribute=root.attribute("size");// 属性名name
root.remove(attribute);
四 . 将文档写入XML文件
(1)文档中全为英文,不设置编码,直接写入的形式
eg ->
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
(2)文档中含有中文,设置编码格式写入的形式
eg ->
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();
五 . 字符串与XML的转换
(1)将字符串转化为XML
eg ->
String text = " sitinspring ";
Document document = DocumentHelper.parseText(text);
(2)将文档或节点的XML转化为字符串
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
Element root=document.getRootElement();
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();
常用方法:
方式一:直接创建所有元素:dom4j为我们准备了工具类DocumentHelper ,该类的所有的方法都是静态方法,用来创建xml文档的各个组成部分。
1.1.1创建Document 和Element对象:
Document doc=DocumentHelper.createDocument();
Element eltRoot=DocumentHelper.createElement(“student”);
doc.setEltRootElement(eltRoot);
1.1.2或者先准备好根元素,使用有参数的构造方法创建Document对象。
Element eltRoot=DocumentHelper.createElement(“student”);
Document doc=DocumentHelper.createDocument(eltRoot);
1.2:添加节点和设置节点内容:
方法:Branch 接口中定义的方法;
public Element addElemen(String name) //以指定的name 为当前节点创建一个子节点,并返回新节点的引用
public void setText(String text) //将content设置为节点的内容
示例如下:
Element eltName=eltRoot.addElement(“name”);
Element eltAge=eltRoot.addElement(“age”);
eltName.setText(“张三”);
eltAge.setText(“18”);
1.3:添加属性
方法:public Element addAttribute(String name,String value)
示例如下:
eltRoot.addAttribute(“sn”,”01”);
方式2:
2.1:org.dom4j.io提供了两个类:SAXReader和DOMReader,前者从一个现有的w3c DOM树构建dom4j树,而SAXReader则使用SAX解析器,从不同的输入源构建dom4j树。
2.1.1: 使用 SAXReader 构建dom4j文档对象:示例如下:
SAXReader saxReader=new SAXReader();
File file=new File(“student.xml”);
Document doc=saxReader.read(file);
2.2.1:使用DOMReader 构建dom4j 文档对象.
DocumentBuilderFactory dbf=new DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
File file=new File(“student.xml”);
org.w3c.dom.Document document=db.parse(file);
DOMReader domReader=new DOMReader();
org.dom4j.Document doc=domReader.read(document);
访问根节点:
Element root=doc.getRootElement();
访问节点:
访问所有节点:
java.util.List childrenList=elt.elements();
访问指定名称的所有节点
java.util.Liat childrenList=elt.elements(“student”);
访问指定名称第一个节点
Element eltChild=elt.element(“student”);
要迭代某个元素的所有子元素:
for(java.util.Iterator it=root.elementIterator();it.hasNext()){
Element element =it.hasNext();
……
}
Dom4j 中集成了对XPath的支持。在选择节点时,可以直接使用XPath 表达式,例如:
要选择例子文件 students.xml中的所有的<name>元素,代码如下:
java.util.List l=root.selectNodes(“//name”);
要选择属性sn的值等于01的<student>元素,代码如下:
java.util.List l=root.selectNodes(“//student[@sn=’01’]”);
注意:为了能够编译执行上述使用XPath表达式的代码,需要配置dom4j 安装包中自带的jaxen包,你也可以从http://sourceforge.net/products/jaxen/上下载jaxen。jaxen是一个用java开发的XPath引擎,用于配合各种基于XML的对象模型,如DOM,dom4j和JDOM。在dom4-1.6.1 目录下,有一个lib 子目录,其中有个jaxen-1.1-beta-6.jar文件,需要在classpath环境变量中配置该文件的全路径名。
访问属性:
要得到某个元素的所有属性,,如下:
java.util.List attrList=elt.attributes();
要得到指定的属性,如下:
Attribute attr=elt.attribute(“sn”);
要得到某个属性的值;如下:
String attrValue=elt.attributeValue(“sn”);
删除节点和节点的属性:
要删除某个元素::可以用Branch接口中定义的remove()方法,如下:
Element eltStu=root.element(“student”);
root.remove(eltStu);
要删除某个属性;如下:
elt.remove(elt.attribute(“sn”));
输出文档:
对象:XMLWriter 实例方法:write(Document doc)
常用的几种构造方法总结:
1:无参数:
2:字节流参数
3:字符流参数。
4:文档输出格式类参数。
示例代码1:
输出文档内容到控制台
XMLWriter xw=new XMLWriter();
xw.write(doc);
示例代码2:
输出文档内容到文件。构造XMLWriter 对象的时候,可以传递字节流参数。其底层代码设置了自动刷新机制。
XMLWriter xw=new XMLWriter(new java.io.FileOutputStream(“student.xml”));
xw.write(doc);
示例代码3:
构造XMLWriter 对象的时候,可以传递java.io.Writer对象。
XMLWriter xw=new XMLWriter(new java.io.FileWriter(“student.xml”));
xw.write(doc);
xw.close();
注意:使用java.io.Writer对象构建的XMLWriter对象,则没有设置自动刷新机制,所以在调用write()方法之后,还要调用xw.close()或者xw.flush()方法。并且XMLWriter 继承自org.xml.sax.helpers.XMLFilterImpl类。它所提供的close()和flush()方法只是其内部java.io.Writer 对象的flush()和close()方法的封装方法。
示例代码4:
构造XMLWriter 对象的时候,可以传递文档输出格式类org.dom4j.io.OutputFormat,利用这个类,可以设置输出文档的字符编码,设置行分割符以及控制使用的缩进字符串等。
下面的代码输出格式使用4个空格作为缩进字符串,元素之间添加新行。
OutputFormat outFmt=new OutputFormat(“ ”,true);
XMLWriter xw=new XMLWriter(outFmt);
xw.write(doc);
下面的代码采用美化的格式输出文档,设置字符串编码为GB2312,并且用4个空格作为缩进。
OutputFormat outFmt=OutputFormat.createPrettyPrint();
outFmt.setEncoding(“GB2312”);
outFmt.setIndent(“ ”);
XMLWriter xw=new XMLWriter(outFmt);
xw.write(doc);
dom4j的名称空间 信息api
常用的方法有8个。
dom4j在Element和Attribute 接口中定义了获取名称空间信息的方法,这些方法和JDOM中的方法相同。如下所示:
public java.lang.String getNamespacePrefix()
该方法返回元素(属性)的名称空间前缀
public java.lang.String getNamespaceURI()
该方法返回元素(属性)的名称空间URI
public java.lang.String getName()
该方法返回元素(属性)的本地名
public java.lang.String getQualifiedName()
该方法返回元素(属性)的限定名
public Namespace getNamespace()
该方法返回元素本身的名称空间
public java.util.List additionalNamespaces()
返回某元素上附加的名称空间声明列表,列表中的每一个对象都是Namespace类型。这个类的方法提供了两个方法分别获得名称空间前缀和本地名。如下:
public java.lang.String getPrefix()
该方法返回名称空间前缀。
public java.lang.String getURI()
该方法返回名称空间的URI。
---------------------------------------------------
DOM4J解析技术
一. Document对象相关
(1) 读取XML文件,获得document对象
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File(emp.xml"));
(2) 解析XML形式的文本,得到document对象
eg ->
String text = "元素";
Document document = DocumentHelper.parseText(text);
(3) 主动创建document对象
eg ->
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点
二. 节点相关
(1) 获取文档的根节点.
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File(emp.xml"));
(2) 取得某节点的单个子节点
eg ->
Element memberElm=root.element("member");// "member"是节点名
(3) 取得节点的文字
eg ->
DString text=memberElm.getText();
或者:
eg ->
String text=root.elementText("name");//这个是取得根节点下的name字节点的文字
(4) 取得某节点下名为"member"的所有字节点并进行遍历
eg ->
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next(); // do something
}
(5)对某节点下的所有子节点进行遍历
eg ->
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next(); // do something
}
(6) 在某节点下添加子节点
eg ->
Element ageElm = newMemberElm.addElement("age");
(7)设置节点文字.
eg ->
ageElm.setText("29");
(8) 删除某节点
eg ->
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
(9)添加一个CDATA节点
eg ->
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
contentElm.clearContent(); //清除节点中的内容,CDATA亦可
三 . 属性相关
(1)取得某节点下的某属性
eg ->
Element root=document.getRootElement();
Attribute attribute=root.attribute("size");// 属性名name
(2)取得属性的文字
eg ->
String text=attribute.getText();
或者: eg ->
String text2=root.element("name").attributeValue("firstname"); //这个是取得根节点下name字节点的属性firstname的值.
(3)遍历某节点的所有属性
eg ->
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
(4)设置某节点的属性和文字
eg ->
newMemberElm.addAttribute("name", "sitinspring");
(5) 设置属性的文字
eg ->
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
(6)删除某属性
eg ->
Attribute attribute=root.attribute("size");// 属性名name
root.remove(attribute);
四 . 将文档写入XML文件
(1)文档中全为英文,不设置编码,直接写入的形式
eg ->
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
(2)文档中含有中文,设置编码格式写入的形式
eg ->
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();
五 . 字符串与XML的转换
(1)将字符串转化为XML
eg ->
String text = " sitinspring ";
Document document = DocumentHelper.parseText(text);
(2)将文档或节点的XML转化为字符串
eg ->
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
Element root=document.getRootElement();
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
利用DOM4J解析SOAP中的各个元素的值,在SOAP消息的收发中可以有一点借鉴的地方
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
java dom4j 解析xml文档 使用java操作xml 例如创建 读取 删除 等等
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
dom4j解析xml实例,dom4j解析xml实例,dom4j解析xml实例,
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
dom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jar
分别使用DOM和DOM4j解析XML文件,因为目前使用最广泛的是DOM4j所以只写了用DOM4j对XML进行增删改查。
java dom4j解析xml (详细注释)
xml解析,dom4j解析,xml循环节点处理,java代码 jar包执行20190331.rar
通过dom4j解析大华组织树到数据库,将文件zzjg.xml改成自己的组织树xml,打下断点在System.out.println(departments);后面直接运行即可得到数据(departments),注释的代码是用来添加到数据库的,仅供参考。时间很赶...
Java使用sax、dom、dom4j解析xml文档的代码,包含dom4j的jar包。
dom4j解析字符串
内含Dom4j解析XML和使用简介
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
很详细的文档 可以借鉴下 希望对你有帮助
本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息
以解析STUDENTS.XML为实例,讲解如何用DOM4J解析XML代码,