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);

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

相关文章
|
10天前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
93 0
|
7月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
1852 1
|
7月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
210 15
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
210 0
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
708 29
|
7月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
212 4

推荐镜像

更多
  • DNS