XML知识点及解析XML

本文介绍了XML的基本概念,包括其作为可扩展标记语言的用途。详细阐述了三种XML解析方法:DOM解析,DOM4J解析和SAX解析。DOM解析要求一次性加载整个XML文件,DOM4J解析提供了更方便的操作接口,而SAX解析适用于大型XML文件,采用事件驱动的方式。在使用这些解析方法时,需注意XML文件路径、标签匹配以及导包等问题。

一:什么是XML?

1、概述

  xml是可扩展标识语言,(Extensible Markup Language)就是开发者在符合xml命名规则的基础之上,可以根据自己的需求定义自己的标签。

2、作用

   xml文件的作用:主要是用来存储数据、

3、解析办法

   解析xml文件的方法:DOM、DOM4J、SAX

二:解析XML

  首先准备一个xml文件,用于解析。

<?xml version="1.0" encoding="UTF-8" ?>
<Person>
    <person person_id="p1">
        <name>zs</name>
        <age>18</age>
    </person>
    <person person_id="p2">
        <name>ls</name>
        <age>20</age>
    </person>
 <person person_id="p3">
        <name>ww</name>
        <age>20</age>
    </person>
<person person_id="p4">
        <name>zl</name>
        <age>18</age>
    </person>
</Person>

1、DOM解析XML

(1)文件目录如下

在这里插入图片描述

(2)编写java代码

java代码如下:

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class Demo {
    public static void printNode(Node node) {
        NamedNodeMap nodeMap = node.getAttributes();
        for (int i = 0; i < nodeMap.getLength(); i++) {
            Node e = nodeMap.item(i);
            System.out.println(e.getNodeName() + " : " + e.getFirstChild().getNodeValue());
        }
    }

    public static void main(String[] args) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            //扫描xml文件的路径
            Document doc = builder.parse("src/person.xml");
            //第一个父标签
            NodeList nodeList = doc.getElementsByTagName("Person");
            Element element = (Element) nodeList.item(0);
            //获取所有person标签
            NodeList nodeLists = element.getElementsByTagName("person");
            for (int i = 0; i < nodeLists.getLength(); i++) {
                Element e = (Element) nodeLists.item(i);
                System.out.println("姓名: " + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
                printNode(e.getElementsByTagName("name").item(0));
                System.out.println("年龄: " + e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
                System.out.println("===============================================");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

注意:xml标签与java代码中的对应关系,以及xml文件路径的写法是否正确。

2、DOM4J解析XML

(1)导入Dom4J.jar包(以dom4j-1.6.1.jar为例)

先是菜单栏上File------->Project Structure,然后:
在这里插入图片描述
选择jar包目录:
在这里插入图片描述

接着一直选ok即可。
在这里插入图片描述
此时包已经导入!
在这里插入图片描述

(2)编写java代码

java代码如下:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.Iterator;

public class Demo {
    public static void main(String[] args) throws DocumentException {
        //  1、创建解析器
        SAXReader reader = new SAXReader();
        //  2、Document对象:通过解析器read方法获取
        Document doc = reader.read("src/person.xml");
        //  3、获取xml根节点
        Element root = doc.getRootElement();
        //  4、遍历解析子节点并打印
        for (Iterator<Element> rootIter = root.elementIterator(); rootIter.hasNext(); ) {
            Element studentElt = rootIter.next();
            for (Iterator<Element> innerIter = studentElt.elementIterator(); innerIter.hasNext(); ) {
                Element innerElt = innerIter.next();
                String innerValue = innerElt.getStringValue();
                System.out.println(innerValue);
            }
            System.out.println("===============================================");
        }
    }
}

3、SAX解析xml文件(适合xml文件大的)

(1)SAX方式:事件驱动,边读边写
(2)编写java代码

java代码如下 :

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class Demo {
    public static void main(String[] args) {
        try {
            //创建解析器工厂
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            //创建解析器
            SAXParser saxParser = saxParserFactory.newSAXParser();
            //通过解析器的parser方法
            saxParser.parse("src/person.xml", new MyDefaultHandler());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

class MyDefaultHandler extends DefaultHandler {

    @Override
    public void startElement(String uri, String localName, String qName,
                             Attributes attributes) throws SAXException {
        System.out.print("<" + qName + ">");
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        System.out.print(new String(ch, start, length));
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        System.out.print("</" + qName + ">");
    }
}

三:总结

(1)注意person.xml在java代码中路径(分有相对路径和绝对路径)的书写是否正确。
(2)xml文件的标签要和java代码中的相对应,注意大小写。
(3)前两者的结果为:
在这里插入图片描述

第三个的结果为:
在这里插入图片描述
(4)在用Dom4J解析xml文件时需要进行导包操作。(dom4j-1.6.1.jar已经上传CSDN,可以免费下载)。


楠哥-------一心想为IT行业添砖加瓦,却总是面向cv编程的程序员。
  谢谢阅读,无误点赞,有误还望评论区指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值