XML解析

简介: XML解析

一、Java中配置文件的三种配置位置及读取方式

1.同包:类名.class.getResourceAsStream("文件名")

package com.ctb.parse;
import java.io.InputStream;
import java.util.Properties;
/**
 * java中配置文件的三种配置及读取文件
 * 1.同包下
 * 2.根目录下
 * 3.安全路劲--WEB-INF下
 * @author biao
 *
 */
public class Demo1 {
  public static void main(String[] args) throws Exception {
    //同包下获取方式
    InputStream is = Demo1.class.getResourceAsStream("config.properties");
    Properties pp=new Properties();
    pp.load(is);
    System.out.println(pp.getProperty("url"));
}
}

2.根路径:类名.class.getResourceAsStream("/文件名")

package com.ctb.parse;
import java.io.InputStream;
import java.util.Properties;
/**
 * java中配置文件的三种配置及读取文件
 * 1.同包下
 * 2.根目录下
 * 3.安全路劲--WEB-INF下
 * @author biao
 *
 */
public class Demo1 {
  public static void main(String[] args) throws Exception {
    //根目录下获取方式
    InputStream is1 = Demo1.class.getResourceAsStream("/config.properties");
    Properties pp1=new Properties();
    pp1.load(is1);
    System.out.println(pp1.getProperty("url"));
  }
}

3.WEB-INF安全路径:context.getResourceAsStream("/WEB-INF/文件名")

package com.ctb.parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("webinf")
public class WebinfServlet extends HttpServlet{
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  doPost(req, resp);
  }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    InputStream is = req.getServletContext().getResourceAsStream("/WEB-INF/config.properties");
    Properties pp=new Properties();
    pp.load(is);
    System.out.println(pp);
  }
}

二、常见的xml解析工具

DOM4J

是所有xml解析中综合性能最优的产品。是一个简单、灵活的开放源代码的库,具有性能优异、功能强大和极易使用的特点。

JDOM和DOM

基于树模型,在运行的时候会将xml文件中的所有内容都加入到内存中,对内存的消耗大。适用于小文档。当文档超过15M左右的时候会出现内存溢出。

SAX解析

基于事件驱动,表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。

1.简介:

   它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。

2、读取特定的xml中的内容

selectNodes():获取指定节点下的节点

selectSingleNode():获取指定节点和内容

getName():得到当前的元素名称

getText():得到元素中间的内容

attributeValue("sex"):得到元素对应的属性的值

package com.ctb.parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * dom4J的使用
 * 
 * @author biao
 *
 */
public class Demo2 {
  public static void main(String[] args) throws Exception {
    InputStream is = Demo2.class.getResourceAsStream("students.xml");
    SAXReader sr = new SAXReader();
    //获取文件内容
    Document doc = sr.read(is);
    // 通过document对象获取根节点
    Element ele = doc.getRootElement();
    System.out.println(doc.asXML());
    System.out.println("-------------");
    List<Element> list = doc.selectNodes("/students/student");
    //遍历
    for (Element stuEle : list) {
      System.out.println(stuEle.asXML());
      Element nameEle = (Element) stuEle.selectSingleNode("name");
      System.out.println(nameEle.asXML());
      System.out.println(stuEle.attributeValue("sid"));
      System.out.println(nameEle.getText());
    }
  }
}

3.【优点】

①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。

②支持XPath。

③有很好的性能。

4.【缺点】

①大量使用了接口,API较为复杂。

四、SAX 解析

1.简介

SAX 的全称是 Simple APIs for XML,也即 XML 简单应用程序接口。与 DOM 不同,SAX 提供的访问模式是一种顺序模式,这是一种快速读写 XML 数据的方式。当使用 SAX 分析器对 XML 文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

package com.ctb.parse;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
/**
 * sax的使用
 * @author biao
 *
 */
public class Demo5 extends DefaultHandler {
  public static void main(String args[]) {
    long lasting = System.currentTimeMillis();
    try {
      SAXParserFactory sf = SAXParserFactory.newInstance();
      SAXParser sp = sf.newSAXParser();
      Demo5 reader = new Demo5();
      sp.parse(new InputSource("src/com/ctb/parse/students.xml"), reader);
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");//33毫秒
  }
}

【优点】

①不需要等待所有数据都被处理,分析就能立即开始。

②只在读取数据时检查数据,不需要保存在内存中。

③可以在某个条件得到满足时停止解析,不必解析整个文档。

④效率和性能较高,能解析大于系统内存的文档。

【缺点】

①需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂。

②单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath。

五、JDOM 解析

1.目的

是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。 JDOM文档声明其目的是“使用或更少的精力解决更多Java/XML问题”

2.【优点】

①使用具体类而不是接口,简化了DOM的API。

②大量使用了Java集合类,方便了Java开发人员。

3.【缺点】

①没有较好的灵活性。

②性能较差。

六、DOM 解析

1.简介

是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型.程序员可以通过操作文档树, 来完成数据的获取 修改 删除等.

2.【优点】

①允许应用程序对数据和结构做出更改。

②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

3.【缺点】

①通常需要加载整个XML文档来构造层次结构,消耗资源大。

②如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。

七、DOM4J - XPath 解析XML

路径表达式

1. /  : 从根节点开始查找

2. // : 从发起查找的节点位置 查找后代节点 ***

3. .  : 查找当前节点

4. .. : 查找父节点

5. @  : 选择属性. *

       属性使用方式:

       [@属性名='值']

       [@属性名>'值']

       [@属性名<'值']

       [@属性名!='值']

package com.ctb.parse;
import java.io.InputStream;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * xpath定位路径
 * 
 * @author biao
 *
 */
public class Demo3 {
  public static void main(String[] args) throws Exception {
    // String str = System.getenv("students.xml");
    InputStream is = Demo3.class.getResourceAsStream("students.xml");
    SAXReader sr = new SAXReader();
    Document doc = sr.read(is);
    Element nameEle = (Element) doc.selectSingleNode("/students/student[@sid='s001']/name");
    System.out.println(nameEle.getText());
  }
}

八、DOM4J常用方法

1.获取根节点

Element root = document.getRootElement();

2.获取子节点

Element child = root.element("child");

3.获取属性

Attribute attr = root.attribute("id");
String attrValue = root.attributeValue("id");

4.遍历子节点

for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
    Element element = it.next();
    // 处理子节点
}

5.遍历属性

for (Iterator<Attribute> it = root.attributeIterator(); it.hasNext();) {
    Attribute attribute = it.next();
    // 处理属性
}

6.获取属性值

String value = attribute.getValue();

7.获取元素文本内容

String text = element.getText();

8.添加子节点

Element child = root.addElement("child");

9.添加属性

root.addAttribute("id", "1");

10.修改元素文本内容

element.setText("new text");

11.修改属性值

attribute.setValue("new value");

12.删除节点

root.remove(child);

今天就分享到这啦,希望能帮助到您哦💕

相关文章
|
15天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器通常内置XML解析器,将XML转换为JavaScript可操作的DOM对象。XML DOM提供遍历、修改XML节点的函数。
|
2天前
|
XML 存储 JavaScript
50. 【Android教程】xml 数据解析
50. 【Android教程】xml 数据解析
7 1
|
3天前
|
XML 数据格式 JavaScript
XML DOM 解析器
浏览器内置XML解析器将XML转换为DOM对象,便于JavaScript操作。通过XMLHttpRequest或ActiveXObject加载XML文档,如示例所示,创建HTTP请求获取&quot;books.xml&quot;,然后将响应解析为DOM。这允许对XML进行遍历和节点操作。
|
5天前
|
XML 网络协议 Java
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
454 1
|
6天前
|
XML JavaScript Java
Java一分钟之-XML解析:DOM, SAX, StAX
Java中的XML解析包括DOM、SAX和StAX三种方法。DOM将XML加载成内存中的树形结构,适合小文件和需要随意访问的情况,但消耗资源大。SAX是事件驱动的,逐行读取,内存效率高,适用于大型文件,但编程复杂。StAX同样是事件驱动,但允许程序员控制解析流程,低内存占用且更灵活。每种方法都有其特定的易错点和避免策略,选择哪种取决于实际需求。
19 0
|
6天前
|
XML JavaScript API
Python XML 解析
Python XML 解析
|
8天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置XML解析器将XML转换为JavaScript可操作的DOM对象。通过XMLHttpRequest或ActiveXObject加载XML文档,如&quot;books.xml&quot;,然后解析成DOM,便于JavaScript访问和操作。示例展示了如何使用XMLHttpRequest加载XML。
|
10天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置XML解析器,用于读取和操作XML。XML解析器将XML转换为JavaScript可访问的DOM对象,提供遍历、增删节点功能。要访问XML文档,需先加载到DOM。以下JS代码示例展示了如何使用XMLHttpRequest加载XML文档&quot;books.xml&quot;:创建XMLHTTP对象,打开并发送请求到服务器,然后将响应转换为DOM对象。
|
22天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
37 0
|
22天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
58 0

推荐镜像

更多