XML基础学习和DOM4J解析

学习内容
1、可以编写xml存放任意内容
2、通过DTD约束编写指定格式的xml
3、通过schema约束编写指定格式的XML
4、可以使用DOM4J解析xml

<?xml version="1.0" encoding="UTF-8"?>

1、文档必须要以<?xml 开头,以?>结束
2、文档声明必须从文档的0行0列位置开始
3、文档声明
    version:指定xml文档版本,必须属性,
    encoding:指定当前文档的编码

元素element
1、元素是xml文档中最重要的组成部分
2、普通元素的结构开始标签、元素体、结束标签组成 hell hadoop
3、元素体:元素体可以是元素,也可以是文本 你好
4、空元素:空元素只有开始标签,而没有结束标签,但元素必须必须自己闭合
5、元素命名
    区分大小写
    不能使用空格,不能使用冒号
    不建议以XML、xml、Xml开头
6、格式化良好的xml文档,必须只有一个根元素

属性
1、属性是元素的一部分,它必须出现在元素的开始标签中
2、属性的定义格式:属性名=属性值,其中属性值必须使用单引号或者双引号
3、一个元素可以有0~N个属性,但一个元素中不能出现同名属性
4、属性名不能使用空格、冒号等特殊字符,且必须以字母开头

注释
XML的注释和HTML相同,<!-- -->

转义

<   &lt;
>   &gt;
"   &quot;
'   &apos;
&   &amp;

CDATA区

<![CDATA[
    任意内容
]]>

这个可以放一些特殊符号,不需要转义,但是不能包括 ]]>

XML 约束 DTD、schema

DTD定义元素语法

<!ELEMENT 元素名 元素描述>
元素名:自定义
元素描述包括:符号和数据类型
    常见符号:?* + () | ,
    常见类型:#PCDTD表示内容是文本,不能是子标签
?  表示该对象可以出现,但是只能出现一次
*   表示该对象可以出现任意次数
+   表该对象至少出现一次可以出现多次
()  用来给元素分组
|   表明在列出的对象中选择一个
,   表示对象必须按指定的顺序出现

本地引用文档说明<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">

schema约束
1、schema是新的xml文档约束
2、schema要比DTD强大很多,是DTD替代者
3、schema本身也是XML文档,但schema文档的扩展名为xsd,而不是xml
4、schema功能更强大,数据类型更完善
5、schema支持名称空间
应用方式

<web-app xmlns="http://www.example.org/web-app_2_5"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
            version="2.5">

DOM4J解析xml

package xlucas.xml;

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

import java.util.List;

/**
 * Created by Xlucas on 2018/4/30.
 */
public class dom4jdemo {
    public static void main(String[] args){

        try {
            //获取Document
            SAXReader sr= new SAXReader();
            Document dc=sr.read("com/src/xlucas/xml/DTD.xml");
            //获取根元素
            Element rootElement = dc.getRootElement();
            //获取根元素以及属性值
            System.out.println(rootElement.getName()+" version "+rootElement.attributeValue("version"));
            //获取所有子元素
            List<Element> elements = rootElement.elements();
            //遍历素有子元素
            for(Element element:elements){
                //获取元素名
                    String chilredelement=element.getName();
                    if("servlet".equals(chilredelement)){
                        //获取子标签内容 方式一
                        Element serveltname=element.element("servlet-name");
                        System.out.println(serveltname.getText());
                        //获取子标签内容 方式二
                        System.out.println(element.elementText("servlet-class"));

                    }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/paicmis/article/details/80153095