java与XML

XML是一种独立于软件和硬件的信息传输工具,常用于简化数据存储和共享,特别是在web开发中。在Java程序中,XML作为配置文件,如Spring的application.xml。XML处理包括文档声明和DTD定义,DOM和SAX是Java解析XML的两种方式,DOM4J因其灵活性被广泛使用。
摘要由CSDN通过智能技术生成

XML

xml是可扩展标记语言,是独立于软件和硬件的信息传输工具

xml应用于web开发的而许多方面,用于简化数据的存储和共享(代替xml的是json)

xml简化数据共享,简化数据传输,简化平台的变更。

在java程序中,xml可以作为应用程序的配置文件,存储应用程序的配置信息,应用案例比如:Spring框架中的application.xml,Mybits框架中的映射配置文件

初识XML

xml其实也是由标签组成的

xml处理执行,简称PI,处理指令用来指挥解析引擎处理xml

xml中对于大小写敏感

xml的第一种书写方式(DTD)

xml的文档声明必须处在第一行的位置 ```xml

​ standalone属性标示当前xml文档是不是独立文档,属性值以及其含义如下:

​ yes 表示当前xml文档是独立文档,文档定义直接包含在当前xml文档中

​ no 表示当xml文档不是独立文档,可以引用外部的文档定义文件

​ 文档声明可以省略。省略后,则文档的元素可以自定义。

​ 如果声明文档规则,则文件中只能使用规则只能的格式进行内容编写

​ 方式一: standalone属性为 yes ,即在当前文档内指定规则

​ 语法:

​ ​

​ ]>

​ 例如:

​ ​

​ ]>

​ 属性的类型:

​ ID 表示唯一

​ (值1|值2)‘值1’ 二选一,有默认值

​ CDATA 文本类型

​ IDREF 依赖 引用已经出现过的类型

​ 属性描述:

​ #REQUIRED 必填

​ #IMPLIED 非必填

​ 方式二:: standalone属性为 no ,即引入外部的规则文件

​ 引入外部DTD文件的语法:

​ 例如:

​ DTD文件中定义元素规则

```

xml的第二种书写方式(STD)

java解析和写入xml

java对于xml解析的方式有两种分别是 DOM(占用内存大) 和SAX(占用内存小)基于事件驱动的流的形式

DOM和SAX的区别,DOM的方式可以理解为是浏览器读取HTML需要读取整个DOM树,而SAX采用的是顺序解析只关注当前元素。但是SAX是事件驱动的,触发事件时需要调用相对应的方法进行处理,这就需要为不同的xml写不同的方法,但是DOM是基于w3c的标准来的,有一套通用的标准对xml进行处理。 解析XML的库有JDOM , DOM4J,JAX-PP

这里只展示DOM4J的用法,因为DOM4J是一个简单的灵活的,开源的库,早期是由于开发JDOM的人员开发后分离出来独立开发,DOM4J提供了比JDOM更好的灵活性。

DOM4j 方式解析

```java // DOM4J类 package com.yh.xml;

import org.dom4j.*; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;

import java.io.FileWriter; import java.io.IOException;

public class ReadWriteXml { private Element root; public void read() throws DocumentException { SAXReader saxReader=new SAXReader(); /* * read方法返回的是Document对象 * 可以通过document对象获取到根节点 */ Document document=saxReader.read("src/com/yh/xml/write.xml"); this.root=document.getRootElement(); } public void write() throws IOException { /* * 创建根节点方式1 */

// Document document= DocumentHelper.createDocument();//创建根节点 // this.root=document.addElement("root") /** * 创建根节点方式2 */ Document doc= DocumentFactory.getInstance().createDocument(); this.root=doc.addElement("root"); //添加子节点 root.addElement("child"); Element child=root.element("child"); //为当前节点添加属性 child.addAttribute("value","1"); child.addAttribute("id","2"); //xml指定输出格式 OutputFormat outputFormat= OutputFormat.createCompactFormat(); XMLWriter writer=new XMLWriter(new FileWriter("src/com/yh/xml/write.xml")); writer.write(doc); //写入Document writer.flush();//刷新缓冲区 writer.close(); }

public Element getRoot() {
    return root;
}

public void setRoot(Element root) {
    this.root = root;
}

} // test类 package com.yh.xml;

import org.dom4j.Attribute; import org.dom4j.DocumentException; import org.dom4j.Element;

import java.io.IOException; import java.util.Iterator; import java.util.List;

public class test { public static void main(String[] args) throws DocumentException, IOException { ReadWriteXml readWriteXml=new ReadWriteXml(); //写入xml文件 readWriteXml.write(); //读取xml文件 readWriteXml.read(); //获取到根节点 Element root=readWriteXml.getRoot(); // //获取节点名称 // System.out.println(root.getName()); // //获取根节点的所有子节点 // List elementList=root.elements(); // elementList.stream().forEach(element -> System.out.println(element.getName())); // //删除子元素 // Element child ele=root.element("student"); // root.remove(childele); // //获取子节点的所有属性 // List elementList2=root.elements(); // elementList2.stream().forEach(element -> { // //获取当前元素的属性个数 // int count=element.attributeCount(); // }); Element child=root.element("child"); List list= child.attributes(); //获取属性集合 list.stream().forEach(attribute -> { //获取属性名称 属性值 System.out.println(attribute.getName()+attribute.getValue()); if(attribute.getValue().equals("1")){ //删除属性 child.remove(attribute); } }); } }

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值