zoukankan      html  css  js  c++  java
  • xml

    普通数据区CDATA:<![CDATA[ 内容 ]]>

    PI指令:通过<?xml-stylesheet type = "text/css" href = "地址"?> 可以引入css样式

    xml的约束  dtd约束、schema约束

     dtd约束

    一个xml中只能有一个dtd约束文件

    元素定义:<!ELEMENT 元素名 约束>

    约束类型:

    对于简单元素

    (#PCDATA)字符串、EMPTY空、ANY任意

    对于复杂元素

    元素名 (子元素1+,子元素2?,子元素3*,子元素4|子元素5),其中逗号表示出现顺序,+为至少一次,?表示有或没有,*表示任意次,默认表示只能一次,|表示其中的一个

    属性定义:<!ATTLIST 元素名

              属性名  属性类型  约束>

    属性类型:CDATA 字符串、枚举 没有关键字 用A|B|C表示、ID  只能时字母或者下划线开头

    约束类型:#REQUIRED 该属性必须出现、#IMPLIED 该属性可以不出现、#FIXED "" 表示该属性为一个固定值 可以使|、直接值  如果不写默认为该值

    定义实体:<!ENTITY TEST "值" >、通过&TEST;引用该实体,需要在内部dtd中使用

    dtd的引入方式外部文件、xml文件中、网络url

    外部文件格式

    <!ELEMENT 元素名 约束>

    <!ELEMENT 元素名 约束>

    <!ELEMENT 元素名 约束>

    ……

    引入方式:<!DOCTYPE 根元素名称 SYSTEM ”dtd路径“>

    xml文件中的格式

    <!DOCTYPE 根元素名 [

    <!ELEMENT 元素名 约束>

    <!ELEMENT 元素名 约束>

    <!ELEMENT 元素名 约束>

    ……

    ]>

    schema约束

     符合xml语法,一个xml中可以有多个schema约束,通过namespace区分,可以指定更具体的类型,非常强大,但是语法复杂

    约束文件text.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xmlns = "http://www.w3.org/2001/XMLSchema" 代表当前是一个约束文件 -->
    <!-- targetNamespace="http://www.xiao.com/2015020"表示这个约束文件的地址 -->
    <schema xmlns = "http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.xiao.com/2015020"
            elementFormDefault="qualified">//
            <element name="person">
                <complexType>//复杂元素
                    <sequence>// <sequence>表示按照顺序,<all> 表示只能出现一次,<choice>表示只能是其中一个,<any>表示任意
                        <element name="name" type="string" maxOccurs = "unbounded"></element>maxOccurs表示出现次数,unbounded表示无限次
                        <element name="age" type = "int"></element>
                    </sequence>
              <attribute name = "" type = "" use = ""></attribute>
    </complexType> </element> </schema>

    使用约束文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <person xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"//说明是一个被约束文件,用xsi代表一个命名空间,可以自定义名字
            xmlns = "http://www.xiao.com/2015020"//约束文件地址
            xsi:schemaLocation="http://www.xiao.com/2015020 text.xsd">
        <name>"beautiful"</name>
        <age>29</age>
    </person>

    xml解析方式

    DOM方式 和  SAX方式

    解析器:jaxp、dom4j

    DOM:

     jaxp解析器的两个抽象类:

    DocumentBuilder:解析器类

    DocumetnBuilderFactory:解析器工厂

    四个接口:

    Document:代表整个文档的对象

    Element:一个元素对象

    Node:一个节点对象,整个文档由多个节点构成

    Attr:属性对象

    具体过程:得到解析器工厂——得到解析器——得到Document对象——得到根元素——根据元素的getNodeChilds循环或迭代找出所有节点

    SAX

     两个抽象类

    SAXParserFactory:解析器工厂

    SAXParser:解析器

    一个类

    DefaultHandler:继承该类,并重写startElement、characters、endElement方法

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException

    public void endElement(String uri, String localName, String qName) throws SAXException

    public void characters(char[] ch, int start, int length) throws SAXException

     在startElement中解析开始标签,characters解析text节点,endElement中解析结束标签

    dom4j解析

     SAXReader reader = new SAXReader();

    Document document = reader.read("filePath");

    通过document对象可以得到根元素,然后解析器子元素

    private static void parseXML(String path) {
            SAXReader reader = new SAXReader();
            try {
                
                Document document = reader.read(new File(path));
                Element root = document.getRootElement();
    //            parse(root);
                Element student = root.element("student");
                List<Element> list = student.elements();
                
                Element school = DocumentHelper.createElement("school");//生成元素
                school.setText("cdut");
                list.add(1, school);//特定位置添加
                OutputFormat format = OutputFormat.createPrettyPrint();//设置格式
                
                XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);//回写
                writer.write(document);
                
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    XPATH

    XPATH写法

    /aaa/bbb:表示aaa标签下的bbb元素(一层)

    /aaa//bbb:表示aaa标签下的所有bbb元素(多层)

    /aaa/*:aaa层下的所有元素

    /aaa/bbb[1]:aaa层下第一个名为bbb的元素

    //aaa[@id]:属性名有id且名为aaa的元素

    /aaa[@id = "1"]:第一层元素名为aaa,属性名有id,且id的值为"1"的元素

    XPATH与DOM4J

    引入jar包:jaxen.jar

    具体实现:

    private static void parseXML(String path) {
            SAXReader reader = new SAXReader();
            try {
                
                Document document = reader.read(new File(path));
    //            get single node in particular position
    //            Node name = document.selectSingleNode("/Students/student/age[1]");
    //            System.out.println(name.getText());
    //            get node list of all ele which has name "age"
    //            List<Node> nodeList = document.selectNodes("//age");
    //            for(Node node : nodeList) {
    //                System.out.println(node.getText());
    //            }
                
                
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    Tomcat设置编码格式utf8
    Tomcat控制台中文乱码解决办法
    LogBack.xml配置文件详解
    logback配置文件---logback.xml详解
    Spring Boot 2.0下配置Log4j2下的错误问题分析与解决
    logback介绍和配置详解
    logback在SpringBoot下出现no applicable action for [appender], current ElementPath is [[configuration][a
    springboot配置Log4j(将输出日志打印在控制台)
    lombok @Slf4j注解
    java之PropertyUtils
  • 原文地址:https://www.cnblogs.com/xiao-ji-xiang/p/9977793.html
Copyright © 2011-2022 走看看