XML解析

XML文档结构

  1. 文档节点: document: xml文件
  2. 元素节点: element: 使用<>标签
  3. 属性节点: attr: 元素上属性
  4. 文档节点: txt: 元素内容

DOM解析

  • Document Object Model: 文档对象模型;
  • 将文档中的成员描述成对象;
  • 使用java操纵XML --> js操纵HTML;
  • DOM解析的特点
    1. 加载时,一次性将XML文件,加载到内存,形成Docuument对象;
    2. 代码操作Document,其实是操作内存中DOM树,与本地磁盘XML文本无直接关系;
    3. 操作的是内存中的`DOM树,磁盘中DOM文件不会改变 --> 进行同步,使两边一致;<查询无需同步,修改数据,需要同步>;
    4. 缺点: XML过大,可能造成内存溢出;

DOM解析步骤

创建连接

  1. 创建解析工厂
  2. 通过解析工厂得到解析器
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建解析工厂 dbf;
DocumentBuilder db = dbf.newDocumentBuilder();
//获取解析器db;
Document doc = db.parse("src/prase/student.XML");
//通过解析器获取doc对象;

获取节点内容

  • 通过元素节点名称获取接节点列表;
NodeList list = doc.getElementsByTagName("name");
//通过doc对象获取节点列表;

Node name = list.item(0);
System.out.println(name.getTextContent());
//获取节点内容;

修改节点内容

  • 修改节点内容,必须通过传输器进行同步;
NodeList agel = doc.getElementsByTagName("age");
//通过doc对象获取节点列表;

Node age = agel.item(0);
age.setTextContent("20");
//获取节点内容;

Transformer tf = TransformerFactory.newInstance().newTransformer();
//创建传输器;
tf.transform(new DOMSource(doc), new StreamResult("src/prase/student.XML"));
//通过传输器传输;

sax解析

  • 逐行读取,基于事件驱动
  • 优点: 不占内存,速度快
  • 缺点: 只能读写,不能回写

DOM4J解析

创建读写对象

  1. 创建SAXReader对象
  2. 读取.xml文件对象
SAXReader reader = new SAXReader();
//1.创建SAXReader对象;
Document document = reader.read("src\\dom4j\\student.xml");
//2. 创建读取.xml文件对象;

获取.xml元素信息

  1. 获取根元素
  2. 获取子元素
    • 获取指定元素 :Element element();
    • 获取指定元素值: String elementText();
    • 获取指定元素属性值: String attributeValue();
Element rootElement = document.getRootElement();
//2.获取根元素

List<Element> elements = rootElement.elements("student");
//3.获取子元素
for(Element stuEle : elements) {
Element nameEle = stuEle.element("name");
System.out.println(nameEle.getText());
// Element element() --> 指定元素
getText() --> 获取元素信息

String name = stuEle.elementText("name");
System.out.println(name);
// String elementText() --> 获取指定元素信息

String num = stuEle.attributeValue("num");
System.out.println(num);
// 获取元素属性

回写.xml元素信息

Element rootElement = document.getRootElement();
// 获取根元素
Element stuEle = rootElement.addElement("student").addAttribute("number", "a0003");
// 获取子元素,设置子元素属性
stuEle.addElement("name").setText("廖浩艇");
stuEle.addElement("age").setText("21");
stuEle.addElement("sex").setText("男");
//添加子元素内容

OutputFormat of = OutputFormat.createPrettyPrint();
// .xml输出指定格式对象
OutputStreamWriter wr = new OutputStreamWriter(new FileOutputStream("src\\dom4j\\student.xml"),"UTF-8");
// 转换指定格式输出流文件;
XMLWriter xmlWriter = new XMLWriter(wr,of);
// 创建.xml输出流文件;
xmlWriter.write(document);
// 输出到.xml文件
wr.close();
//关闭文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值