XML解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: XML解析

一.DOM

studentx.xml

<?xml version="1.0"?> 
<students> 
  <student> 
    <name>John</name> 
    <grade>B</grade> 
    <age>12</age> 
  </student> 
  <student> 
    <name>Mary</name> 
    <grade>A</grade> 
    <age>11</age> 
  </student> 
  <student> 
    <name>Simon</name> 
    <grade>A</grade> 
    <age>18</age> 
  </student> 
</students>

XMLParser.java

import java.io.File;  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
public class XMLParser {
  public void getAllUserNames(String fileName) {  
      try {
      //1.获得一个文档解析器工厂:定义工厂API,使应用程序能够从XML文档获取生成DOM对象树的解析器
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
      //2.获得一个文档解析器:定义从XML文档获取DOM文档实例的API。 使用这个类,应用程序员可以从XML获得一个Document 。
      DocumentBuilder db = dbf.newDocumentBuilder();  
      File file = new File(fileName);  
      if (file.exists()) {  
        //3.解析器解析xmL文件,获得一个DOM文档
        Document doc = db.parse(file);  
        //4.通过DOM文档获取根结点元素,并打印
        Element docEle = doc.getDocumentElement();  
        System.out.println("Root element of the document: "+ docEle.getNodeName());  
        //5.通过DOM文档根据标签名获取所有其对应的结点,并将其存储在NodeList抽象集合中
        NodeList studentList = docEle.getElementsByTagName("student");  
        System.out.println("Total students: " + studentList.getLength());  
        //6.打印"student"结点下所有的结点信息
        if(studentList != null && studentList.getLength() > 0) {  
          for(int i = 0; i < studentList.getLength(); i++) {  
            //7.遍历一个"student"结点
            Node node = studentList.item(i);  
            //8.node.getNodeType() == Node.ELEMENT_NODE,表示node结点是一个Element(一组)
            if(node.getNodeType() == Node.ELEMENT_NODE) {  
              System.out.println("=====================");  
              Element e = (Element) node;  
              NodeList nodeList = e.getElementsByTagName("name");  
              System.out.println("Name: "+ nodeList.item(0).getChildNodes().item(0).getNodeValue());  
              nodeList = e.getElementsByTagName("grade");
              System.out.println("Grade: "+nodeList.item(0).getChildNodes().item(0)  .getNodeValue());  
              nodeList = e.getElementsByTagName("age");  
              System.out.println("Age: "+ nodeList.item(0).getChildNodes().item(0).getNodeValue());  
            }
          }  
        }
      }
    } catch (Exception e) {  
      System.out.println(e);  
    }  
  }  
  public static void main(String[] args) {  
    XMLParser parser = new XMLParser();  
    parser.getAllUserNames("./src/students.xml");  
  }  
}

2.XPath方式

users.xml

<?xml version="1.0"?> 
<users>
  <user id="1">
    <name>张三</name>
    <createTime>2018-10-15</createTime>
    <password>123</password>
    <phone>10086</phone>
    <nickName>阿毛</nickName>
  </user>
  <user id="2">
    <name>李四</name>
    <createTime>2018-10-15</createTime>
    <password>234</password>
    <phone>12306</phone>
    <nickName>二狗子</nickName>
  </user>
</users>
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UserEntity {
  private Long id;
  private String name;
  private Date createTime;
  private String password;
  private String phone;
  private String nickName;
  static UserEntity buildUserEntity(String id, String name, String createTime, String password, String phone,
      String nickName) throws ParseException {
    UserEntity user=new UserEntity();
    user.id=Long.valueOf(id);
    user.name=name;
    user.createTime=new SimpleDateFormat("yyyy-MM-dd").parse(createTime);
    user.password=password;
    user.nickName=nickName;
    return user;
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return id+"-"+name+"-"+createTime+"-"+password+"-"+nickName;
  }
}
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
public class XMLParser {  
  public void getAllUserNames(String fileName) {  
    try {
      //1.获得一个文档解析器工厂:定义工厂API,使应用程序能够从XML文档获取生成DOM对象树的解析器
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
      //2.获得一个文档解析器:定义从XML文档获取DOM文档实例的API。 使用这个类,应用程序员可以从XML获得一个Document 。
      DocumentBuilder builder = dbf.newDocumentBuilder();  
      File file=new File(fileName);
      //3.通过解析器解析xml文件,获得一个文档对象
      Document document=builder.parse(file);
      //4.获取新的XPathFactory实例
      XPathFactory xpathFactory=XPathFactory.newInstance();
      //5.一个XPathFactory实例可以用来创建XPath对象
      XPath xpath=xpathFactory.newXPath();
      //6.xpath根据根结点"users"标签解析document文档
      NodeList nodeList=(NodeList) xpath.evaluate("/users/*", document,XPathConstants.NODESET);
      //7.获取一个ArrayList实例用来存储UserEntity对象
      List<UserEntity> userList=new ArrayList<UserEntity>();
      //8.获取所有的user结点
      for(int i=1;i<nodeList.getLength()+1;i++) {
      String path="/users/user["+i+"]";
      String id=(String) xpath.evaluate(path+"/@id", document,XPathConstants.STRING);
      String name=(String) xpath.evaluate(path+"/name", document,XPathConstants.STRING);
      String createTime=(String) xpath.evaluate(path+"/createTime", document,XPathConstants.STRING);
      String password=(String) xpath.evaluate(path+"/password", document,XPathConstants.STRING);
      String phone=(String) xpath.evaluate(path+"/phone", document,XPathConstants.STRING);
      String nickName=(String) xpath.evaluate(path+"/nickName", document,XPathConstants.STRING);
      //调用buildUserEntity()方法构建UserEntity对象
      UserEntity userEntity=UserEntity.buildUserEntity(id,name,createTime,password,phone,nickName);
      userList.add(userEntity);
      }
      for(UserEntity user:userList) {
        System.out.println(user);
      }
    }catch(Exception e){
      e.getMessage();
    }
  }  
  public static void main(String[] args) {  
      XMLParser parser = new XMLParser();  
      parser.getAllUserNames("./src/users.xml");  
  }  
}

 

3.dom4j

1.引入依赖

    <!-- dom4j解析xml -->
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
  </dependency>

2.application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="userDao" class="cn.yiguang.testProject.annotation.UserDaoImpl"></bean>
    <bean id="user1Dao" class="cn.yiguang.testProject.annotation.User1DaoImpl"></bean>
    <bean id="user2Dao" class="cn.yiguang.testProject.annotation.User2DaoImpl"></bean>
    <bean id="userService" class="cn.yiguang.testProject.annotation.UserServiceImpl"></bean>
</beans>

3.BeanDefine.java

public class BeanDefine {
  private String id;
  private String className;
  public BeanDefine(String id, String className) {
    this.id = id;
    this.className = className;
  }
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getClassName() {
    return className;
  }
  public void setClassName(String className) {
    this.className = className;
  }
  @Override
  public String toString() {
    return "id:"+id+",className:"+className;
  }
}

4.测试

import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Test {
  public static void main(String[] args) {
    // 读取xml文件,转换成Document结点
    Document document = null;
    // 创建一个SAXReader解析器
    SAXReader saxReader = new SAXReader();
    try {
      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
      document = saxReader.read(classLoader.getResourceAsStream("configAnnotation.xml"));
      Element beans = document.getRootElement();
      for (Iterator<Element> beansList = beans.elementIterator();beansList.hasNext();) {
        Element element = beansList.next();
        BeanDefine bean = new BeanDefine(element.attributeValue("id"), element.attributeValue("class"));
        System.out.println(bean.toString());
      }
    }catch (DocumentException e){
      System.out.println("解析配置文件出错......");
    }
  }
}


相关文章
|
6天前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
34 1
|
2天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
4天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM解析器是内置在大多数浏览器中的工具,用于读取和操作XML文档。它将XML数据转换成JavaScript可访问的XML DOM对象。DOM提供了一系列方法和函数来遍历、访问、插入和删除XML树的节点。在处理XML文档前,需要先加载它到DOM对象中。示例如下:通过条件判断创建XMLHTTP对象,打开并发送请求获取XML文件内容,最后将服务器响应设置为XML DOM对象以便后续处理。
|
8天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM解析器是内置在大多数浏览器中的工具,用于读取和操作XML文档。它将XML数据转换成JavaScript可访问的XML DOM对象。DOM提供了一系列方法和函数来遍历、访问、插入和删除XML树的节点。在处理XML文档前,需要先加载到DOM中。示例代码展示了如何通过XMLHTTP对象加载并设置&quot;books.xml&quot;为XML DOM对象以供后续操作。
|
2天前
|
XML 存储 JavaScript
xml介绍与解析,及xml库包使用
xml介绍与解析,及xml库包使用
7 0
|
6天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM解析器是内置在大多数浏览器中的工具,用于读取和操作XML文档。它将XML数据转换成XML DOM对象,使JavaScript能够访问和处理这些数据。DOM解析器提供了一系列方法来遍历、访问、插入和删除XML树中的节点。为了操作XML文档,首先需要加载文档到DOM对象中。示例代码展示了如何通过XMLHTTP请求加载一个名为&quot;books.xml&quot;的XML文件,并将其设置为XML DOM对象以供后续处理。
|
10天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器内置在多数浏览器中,用于将 XML 文件转化为 JavaScript 可操作的 XML DOM 对象。此对象提供了一系列方法来遍历、访问、插入和删除 XML 文档中的节点。在使用 JavaScript 处理 XML 前,需先加载文档至 XML DOM。示例代码展示了如何利用 AJAX 技术加载并解析 &quot;books.xml&quot; 文件为 DOM 对象以备后续操作。
|
26天前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
49 6
|
1天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
9天前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
11 1

推荐镜像

更多
下一篇
云函数