使用java解析XML文件的步骤

简介: 使用java解析XML文件的步骤

以前的时候,也解析过,今天又拿出来解析就让忘记怎么解析了,后来在网上查还有自己想,终于解析出来了,下面就是原XML文件:

accp.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE accp SYSTEM "accp.dtd">
<?xml-stylesheet type="text/css" href="accp.css"?>
<accp>
  <teachers>
    <teacher >
      <name>刘老师</name>
      <age>30</age>
      <degree>硕士</degree>
      <position>Java</position>   
    </teacher>
    <teacher>
      <name>李老师</name>
      <age>28</age>
      <degree>本科</degree>
      <position>.Net</position>   
    </teacher>
  </teachers>
  <students>
    <student>
      <name>高胜寒</name>
      <age>21</age>     
      <grade>Y2</grade>
      <school>北京中心</school>
    </student>
    <student>
      <name>信达雅</name>
      <age>19</age>
      <grade>S2</grade>
      <school>天津中心</school>
    </student>
  </students>
</accp>

还需要一个dtd文件accp.dtd:

<!ELEMENT accp (teachers,students)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT students (student*)>
<!ELEMENT teacher (name,age,degree,position)>
<!ELEMENT student (name,age,grade,school)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT degree (#PCDATA)>
<!ELEMENT position (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT school (#PCDATA)>

最后就是解析的代码了:

//解析xml文件
  public static void Test1(){
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    //从DOM工厂获得DOM解析器
    try {
      DocumentBuilder db = dbf.newDocumentBuilder();
      //解析文档,得到一个dom树
      Document doc = db.parse("accp.xml");
      //得到所有的teacher节点
      NodeList teaList = doc.getElementsByTagName("teacher");
      System.out.println("xml里面共有"+teaList.getLength()+"个老师信息!");
      //循环老师信息
      for (int i = 0; i < teaList.getLength(); i++) {
        Node teacher = teaList.item(i);
        //获取第i个老师的信息的id值并输出
        /*Element element = (Element)teacher;
        String id = element.getAttribute("id");
        System.out.println("id:"+id);*/
        //获取第i个老师元素的所有子元素的名称和值并输出
        for(Node node=teacher.getFirstChild();node!=null;node =node.getNextSibling() ){
          if(node.getNodeType()==Node.ELEMENT_NODE){
            String value = node.getFirstChild().getNodeValue();
            System.out.print("name:"+value+"\t");
          }
        }
        System.out.println();
      }
    } catch (ParserConfigurationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SAXException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
  }

最后看一下运行结果:

目录
相关文章
|
5天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
12 0
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
17小时前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
4 0
|
19小时前
|
存储 前端开发 Java
Java实现文件分片上传
Java实现文件分片上传
4 0
|
2天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
2天前
|
Java
Java输入输出流详细解析
Java输入输出流详细解析
Java输入输出流详细解析
|
3天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
17 0
|
4天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
7天前
|
Linux 网络安全 Apache
使用树莓派搭建个人网站,并发布到外网可访问:实用步骤解析
使用树莓派搭建个人网站,并发布到外网可访问:实用步骤解析
|
8天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
17 1

推荐镜像

更多