XML DOM解析文档 获取文本DoM4j实现增删改
来源:互联网 发布:交通枢纽大数据 编辑:程序博客网 时间:2024/05/17 03:32
XML
可扩展标记语言:标签可以自定义
命名规范:不能用数字开头,不能使用纯数字,区分大小写
功能:用作配置文件
用作网络数据传输的载体
组成部分
a.文档声明:<?xml version="1.0" encoding="utf-8"?>
encoding告诉浏览用什么编码去解析
文档声明必须在第一行,顶格
b.根标签:有且仅有一个根标签
c.其他标签:有开始标签,一定要有结束标签
d.文本:CDATA区:该区域的文本,会按照纯文本解析
格式:<![CDATA[内容]]>
解析XML:
DOM:
将文档的各个组成部分 抽取一个对象
Element 标签对象
Attribute 属性对象
Text 文本对象
Comment 注释对象
Node 节点对象
Doucment 文档对象
解析过程:将文档一次性,加载进内存,然后将文档各个组成不封抽取为对象
优点:能够对文档进行增删改查
缺点:耗内存,适用于PC端
jar包(解析器)名称:dom4j-1.6.1.jar
SAX:
基于事件,逐行解析,一次读取一行,释放一行
优点:不占内存,适用于移动端
缺点:只能查,不能增删改
jar包(解析器)名称:kxml2-2.3.0.jar
xmlpull-1-1-3-4c.jar
DOM4J解析器:
获取标签对象:
导入dom4j-1.6.1.jar
创建一个XML文件或者粘贴一个到项目底下
获取属性和标签里的文本
获取节点:
a.node():获取单个节点对象;nodeIterator(); 获取多个节点对象,只能获取子节点
b.获取根标签对象 getRootElement()
c.Element()获取第一个子标签
Elements() 获取所有的子标签
elememtesIterator() 获取所有子标签对象
d.attribute() 获取单个属性对象 getName()获取属性的键 getValue()获取属性的值
attributes()获取所有的属性对象
attributeIterator() 获取所有的属性对象
直接获取属性对象的值 attributeValue()
e.先获取到文本所在的标签对象 通过getText()拿出这个标签直接的文本elementText("name");
封装数据:把从XML文件中解析出来的数据封装起来
1.创建javabean存放
2.
15张三110
20李四120
DOM4J实现增删改
例子:将赵三改为王五 删除属性id=s01
例子:添加
添加标签:addElement("标签名");
添加属性:addAtrriburte("属性","属性值")
添加文本:addText("文本");
可扩展标记语言:标签可以自定义
命名规范:不能用数字开头,不能使用纯数字,区分大小写
功能:用作配置文件
用作网络数据传输的载体
组成部分
a.文档声明:<?xml version="1.0" encoding="utf-8"?>
encoding告诉浏览用什么编码去解析
文档声明必须在第一行,顶格
b.根标签:有且仅有一个根标签
c.其他标签:有开始标签,一定要有结束标签
d.文本:CDATA区:该区域的文本,会按照纯文本解析
格式:<![CDATA[内容]]>
<?xml version="1.0" encoding="UTF-8"?><students><student id="s001"><name>张三</name><age>23</age><tel>110</tel></student><student id="s002"><name>李四</name><age>24</age><tel>119</tel></student></students>
解析XML:
DOM:
将文档的各个组成部分 抽取一个对象
Element 标签对象
Attribute 属性对象
Text 文本对象
Comment 注释对象
Node 节点对象
Doucment 文档对象
解析过程:将文档一次性,加载进内存,然后将文档各个组成不封抽取为对象
优点:能够对文档进行增删改查
缺点:耗内存,适用于PC端
jar包(解析器)名称:dom4j-1.6.1.jar
SAX:
基于事件,逐行解析,一次读取一行,释放一行
优点:不占内存,适用于移动端
缺点:只能查,不能增删改
jar包(解析器)名称:kxml2-2.3.0.jar
xmlpull-1-1-3-4c.jar
DOM4J解析器:
获取标签对象:
导入dom4j-1.6.1.jar
创建一个XML文件或者粘贴一个到项目底下
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class DOMDemo {public static void main(String[] args) throws Exception {//导入dom4j.jar包//创建解析器对象SAXReader reader = new SAXReader();//加载xml文件Document doc = reader.read(new FileInputStream("students.xml"));//获取跟标签对象 getRootElemElement rootElement = doc.getRootElement();System.out.println(rootElement.getName());//输出students//获取跟标签下的子标签 element();Element element = rootElement.element("student1");System.out.println(element.getName());//获取所有子标签 此方法返回结果集List<Element> list = rootElement.elements();for(Element e : list){System.out.println(e.getName());}//迭代器获取 elementIteratorIterator<Element> iterator = rootElement.elementIterator();while(iterator.hasNext()){ Element element2 = iterator.next(); System.out.println(element2.getName());}}}
获取属性和标签里的文本
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class DOMtxt {public static void main(String[] args) throws Exception {//获取解析器对象SAXReader reader = new SAXReader();//加载XML文件Document doc = reader.read(new FileInputStream("students.xml"));//方式1:分布获取属性对象//获取跟标签对象Element rootElement = doc.getRootElement();//获取标签对象Element element = rootElement.element("student1");//获取属性id对象Attribute attribute = element.attribute("id");//获取值String value = attribute.getValue();//属性的值s01String name = attribute.getName();System.out.println(name+"--"+value);//方式2:直接获取属性值String value2 = rootElement.element("student1").attribute("id").getValue();System.out.println(value2);//方式3:获取所有属性对象 attributesList<Attribute> attributes = rootElement.element("student1").attributes();for(Attribute att : attributes){String name2 = att.getName();String value3 = att.getValue();System.out.println(name2+"--"+value3);}//方式4:通过迭代器获取所有属性值Iterator<Attribute> attributeIterator = rootElement.element("student1").attributeIterator();while(attributeIterator.hasNext()){Attribute attribute2 = attributeIterator.next();String name2 = attribute2.getName();String value3 = attribute2.getValue();System.out.println(name2+"--"+value3);}//获取标签间的文本//方式1:层层往下拿String text = doc.getRootElement().element("student1").element("name").getText();System.out.println(text);//方式2: 一步String text2 = doc.getRootElement().element("student1").elementText("name");System.out.println(text2);}}
获取节点:
a.node():获取单个节点对象;nodeIterator(); 获取多个节点对象,只能获取子节点
b.获取根标签对象 getRootElement()
c.Element()获取第一个子标签
Elements() 获取所有的子标签
elememtesIterator() 获取所有子标签对象
d.attribute() 获取单个属性对象 getName()获取属性的键 getValue()获取属性的值
attributes()获取所有的属性对象
attributeIterator() 获取所有的属性对象
直接获取属性对象的值 attributeValue()
e.先获取到文本所在的标签对象 通过getText()拿出这个标签直接的文本elementText("name");
import java.io.FileInputStream;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class DOM4JDemo {public static void main(String[] args) throws Exception {// 导入DOM4J jar包// 创建解析器对象SAXReader reader = new SAXReader();// 加载xml文件Document doc = reader.read(new FileInputStream("students.xml"));// 方式1:分布获取属性对象// 获取跟标签对象Element rootElement = doc.getRootElement();// 使用递归获取所有节点getNodes(rootElement);}private static void getNodes(Element ele) {// 输出当前节点System.out.println(ele.getName());// 迭代器获取所有子节点Iterator<Node> iterator = ele.nodeIterator();// 遍历while (iterator.hasNext()) {Node nodes = iterator.next();// 判断节电是否属于标签if (nodes instanceof Element) {Element eles = (Element) nodes;// 调用递归getNodes(eles);}}}}
封装数据:把从XML文件中解析出来的数据封装起来
1.创建javabean存放
package FZstusdent;import java.io.Serializable;public class stu implements Serializable {/** * */private static final long serialVersionUID = 1L;private String age;private String name;private String tel;public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public stu(String age, String name, String tel) {super();this.age = age;this.name = name;this.tel = tel;}public stu() {super();}}
2.
package FZstusdent;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class FZDemo {public static void main(String[] args) throws FileNotFoundException, DocumentException {//创建集合存储对象ArrayList<stu> list = new ArrayList<stu>();//创建解析器SAXReader reader = new SAXReader();//加载XML文件Document doc = reader.read(new FileInputStream("students.xml"));//获取跟标签对象Element rootElement = doc.getRootElement();//获取所有的子标签对象Iterator<Element> iterator = rootElement.elementIterator();//遍历取出数据并封装while(iterator.hasNext()){Element ele = iterator.next();String name = ele.elementText("name");String age = ele.elementText("age");String tel= ele.elementText("tel");//封装到对象中 stu newStu = new stu(age, name, tel); //添加到集合中 list.add(newStu);}//遍历集合for(stu s: list){System.out.println(s.getAge()+s.getName()+s.getTel());}}}
15张三110
20李四120
DOM4J实现增删改
例子:将赵三改为王五 删除属性id=s01
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class XiuGaiDEmo {public static void main(String[] args) throws Exception {//读取XML文件SAXReader reader = new SAXReader();Document doc = reader.read(new FileInputStream("students.xml"));//修改文本 将张三改为王五doc.getRootElement().element("student1").element("name").setText("王五");//删除属性id=s01Element rootElement = doc.getRootElement();//获取子标签集List<Element> list = rootElement.elements();//遍历for(Element ele : list){//获取属性的值String value = ele.attributeValue("id");if(value.equals("s01")){ele.attribute("id").detach();}}//重新写入硬盘 覆盖掉XMLWriter writer = new XMLWriter(new FileOutputStream("students.xml"));writer.write(doc);writer.close();}}
例子:添加
添加标签:addElement("标签名");
添加属性:addAtrriburte("属性","属性值")
添加文本:addText("文本");
package xiugai;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter;import org.xml.sax.DocumentHandler;public class ZengJia {public static void main(String[] args) throws IOException {//用代码写一个XML//文档帮助类写一个声明Document doc = DocumentHelper.createDocument();//添加一个跟标签Element rootElement = doc.addElement("students");//添加一个子标签Element element = rootElement.addElement("stu");//添加属性element.addAttribute("id", "s01");//添加名字标签Element name = element.addElement("name");//添加名字name.addText("张三");//添加年龄标签Element age = element.addElement("age");//添加年龄age.addText("22");//写到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("stud.xml"));writer.write(doc);writer.close();}}
阅读全文
0 0
- XML DOM解析文档 获取文本DoM4j实现增删改
- JAXP对XML文档进行DOM解析实现增删改
- XML解析(增删改查)-DOM解析(Jaxp、DOM4J实现DOM解析)、SAX解析(Jaxp实现SAX解析)
- java Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- dom4j解析xml文档(增删查改)
- DOM4j 解析xml文档,完成增删改查
- dom4j解析xml增删改查
- dom4j解析XML之【增删改查】
- DOM解析XML的增删改查实现
- 使用dom4j解析、增删改xml文档,xPath技和SAX解析
- 【XML解析】(2)利用DOM解析技术对XML文档进行增删改查操作
- 解析XML-DOM-增删改查
- xml文档解析之dom4j的增删改查 ,乱码问题
- XML之------dom4j对XML文档增删改查
- Java解析xml文档之DOM解析--CRUD(增删改查)
- xml文档解析 DOM和DOM4J分析
- web day6 DOM&XML(JAXP的SAX解析XML,schema入门,dom4j&XPath的增删改查)
- Angular购物车的完整版
- 数据结构 堆
- struts2上转文件:
- 类的定义
- 在Linux下彻底删除掉mysql
- XML DOM解析文档 获取文本DoM4j实现增删改
- 柱形图中求最大四边形面积
- NOIp2016 题解
- 逃离焦油坑的伟大尝试——《人月神话》推荐
- 定义函数
- 机器学习应用——sklearn自带数据集训练(支持向量机分类)
- 【贪心+优先队列 / 并查集】【cofun1025】工作安排
- sqlmap 简单操作与数据库账户密码破解
- 寻找单链表的倒数第四个节点