XML学习笔记

XML被设计为“什么都不做”,XML只用于组织、存储数据,除此之外的数据生成、读取、传送等等的操作都与XML本身无关!

XML语法:**<?xml version="1.0" encoding="utf-8" standalone="no"?>

  • version:版本号
  • encoding:编码
  • standalone:yes/no 是否独立使用,默认 no
  • 文档声明时,属性的位置不能变

元素:xml中的元素和标签指的是一个东西

注意:XML语法是规范的不能乱写

属性:XML元素的一部分,命名规范和元素一样

<!--属性名是name,属性值是china-->
<中国 name="china">

</中国>

注释和XML一样

CDATA:包裹的内容不会被解析,原封不动得输出*,语法:

<![CDATA[
	...内容
]]>

处理指令(PI)用来只会解析引擎如何解析xml内容

如:<?xml-stylesheet type="text/css" href="1.css"?>使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容

JDK中的XML API

  1. JAXP:负责解析XML
  2. JAXB:负责将XML映射为java对象

什么是XML解析

解析方式
  • dom:文档对象模型
  • sax:是XML社区的标准
解析操作

看出程序要访问XML文档的过程是先由解析器对文档进行分析,然后程序通过解析器所提供的DOM接口或SAX接口对分析结果进行操作,从而间接实现了对XML文档的访问

常用解析开发包

实际常用的是第三方解析,dom4j(对jdom进行了封装,他又对DOM进行了封装)

jaxp(JDK内置的开发包)

DOM解析操作

DOM解析是一个基于对象的API,它把XML的内容加载到内存中,生成与XML文档内容对应的模型!当解析完成,内存中会生成与XML文档的结构与之对应的DOM对象树,这样就能够根据树的结构,以节点的形式对文档进行操作!

简单来说:DOM解析会把XML文档加载到内存中,生成DOM树的元素都是以对象的形式存在,通过对象来操作XML文档,DOM树:

XML文档的数据时带有关系型的,所以上面的DOM存在父节点、子节点、兄弟节点、后代和祖先的关系

核心接口

  • Document:代表整个XML文档(也可表示HTML文档),通过Document节点可以访问XML文件中所有的元素内容
  • Node:Node节点在XML操作接口中相当于普通Java类的Object(XML接口中的爸爸),很多核心接口都实现了它
  • NodeList:代表一个节点的集合,通常是一个节点中子节点的集合
  • NameNodeMap:主要用于属性节点的表示,表示一组节点和其唯一的名称的对应关系

节点之间的关系:

Document也实现了Node接口,一个Document由多个Node组成,这样看来Document本身也是一个Node,就像java中类也是一个对象

dom4j解析技术

基本操作

    public void Test1() throws DocumentException {
//      第一步,通过创建SAXReader读取xml文件,获取Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read("x.xml");

//      第二步,通过Document对象,拿到XML的根元素对象
        Element root = doc.getRootElement();

//      第三步,通过根元素获取所有的book标签对象
        //elements("标签名")它可以拿到当前元素下指定的子元素集合
        //此参数不能使用最大的那个闭合标签
        List<Element> list = root.elements("Person");

//  第四步,遍历每个book标签对象,然后获取到book标签对象内的一个元素
        //element("标签名")获取指定的标签对象(就是Element元素对象)
        //通过getText()方法拿到起始标签和结束标签之间的文本内容
        for(Element e : list){
            System.out.println(e.element("boy").getText());
            //asXML()方法将元素对象转换成字符串形式
            System.out.println(e.asXML());
            System.out.println(e.element("boy").asXML());
            //elementText就()方法直接获取标签内的文本内容
            System.out.println(e.elementText("boy"));
        }
    }

原文地址:https://www.cnblogs.com/csyh/p/12615953.html