JAVA XML文件

---------------------------------------------------------------------------------------------------------------------------------

使用XML文件可以提高阅读性

XML文件示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!--第一行必须正确写入-->
<!-- 注释内容 可用ctrl + / 快捷键-->
    <students>
        <student>
            <name>zhangsan</name>
            <age>23</age>
<!--     第一种表达 < > 的方式       -->
            <info> 学生信息:&lt; &gt; &lt; &gt; &lt; &gt; &lt; &gt; &lt; &gt; </info>
<!--     第二种表达方式       -->
            <info><![CDATA[我是第二种<><><><><<><<]]]></info>
        </student>
        <student>
            <name>lisi</name>
            <age>24</age>
        </student>

    </students>

解析XML 即从XML获取数据 

Document对象:整个xml文档 (Document)
1.Element对象:所有标签(students,student,name,age)
2.Attribute对象:所有属性(id)  
3.Text对象:所有文本内容(zhangsan,23,lisi,24)
id的值并不是一个对象,可以通过id直接获取到,它只是一个普通的属性值

1.2.3.的共同父类为Node对象


利用dom4j解析XML文件

dom4j的下载地址:dom4j
下载1.6.1压缩包并存放至需要的位置
将dom4j文件内的dom4j-1.6.1.jar导入idea即可

解析过程就好像吃玉米,需要一层一层往里剥(一层一层解析)

示例:

已创建一个Student标准Javabean类,在此不进行展示

package aResumeitheima.Day_16;

//利用dom4j解析XML文件

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

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class XmlParse {
    public static void main(String[] args) throws DocumentException {
        //1.获取一个解析器对象
        SAXReader s = new SAXReader();
        //2.利用解析器把xml文件加载到内存中,并返回一个文档对象
        Document read = s.read(new File(("BhPractice\\src\\aResumeitheima\\Day_16\\XML\\student.xml")));//需要完整路径
        //3.获取到根标签的方法
        Element rootElement = read.getRootElement();

        ArrayList list = new ArrayList();



        // ---------------------------------------------------------------------
//        element():可以获取调用者所有的子标签,会把这些子标签放到一个集合中返回
//        List elements = rootElement.elements();
//        System.out.println(elements.size());
        // ---------------------------------------------------------------------
        List<Element> student = rootElement.elements("student");
        for (Element element : student) {
//            System.out.println(element);
            //获取id属性(--attribute()--)和属性值(--getValue()--)
            Attribute i = element.attribute("id");
            String id = i.getValue();

            //获取标签(--element()--)和标签体内容(--getText()--)
            Element n = element.element("name");
            String name = n.getText();

            Element a = element.element("age");
            String age = a.getText();



            Student stu = new Student(id,name,Integer.parseInt(age));
            list.add(stu);


        }
        for (Object o : list) {
            System.out.println(o);
        }

    }
}
 

运行结果: 


文档约束(XML的约束)

约束分类

  • DTD
  • schema

步骤

1.创建一个文件,这个文件的后缀名为.dtd;
2.看xmI文件中使用了哪些元素;
<!ELEMENT>可以定义元素
3.判断元素是简单元素还是复杂元素:
简单元素:没有子元素。
复杂元素:有子元素的元素;

示例:
注:需要严格按照规则进行编写数量也需要一致

DTD约束

能在xml中引入约束文档;
能够简单阅读约束文档;
根据约束编写xml文件;

引入DTD约束的三种方法

1、引入本地dtd

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons SYSTEM 'person.dtd'>

<persons>
    <person>
        <name>艾斯</name>
        <age>23</age>
    </person>
</persons>
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

2、在xmI文件内部引入

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons [
        <!ELEMENT persons (person)>
        <!ELEMENT person (name,age)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        ]>

<persons>
    <person>
        <name>艾斯</name>
        <age>23</age>
    </person>
</persons>

3、引入网络dtd

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons PUBLIC “dtd文件的名称”  "dtd文档的URL">

<persons>
    <person>
        <name>艾斯</name>
        <age>23</age>
    </person>
</persons>

总结:

1、引入本地dtd
<!DOCTYPE 根元素名称 SYSTEM 'DTD文件的路径'>

2、在XML文件内部引入
<!DOCTYPE 根元素名称 [dtd文件内容]>

3、引入网络dtd
<!DOCTYPE 根元素名称 "DTD文件名称"  "DTD文档的URL">

DTD的语法规则:

 定义一个元素的格式为:<!ELEMENT 元素名 元素类型>

简单元素:
·EMPTY:表示标签体为空;
·ANY:表示标签体可以为空也可以不为空;
·PCDATA:表示该元素的内容部分为字符串;

复杂元素:
直接写子元素名称。
1、多个子元素使用","或者"|"隔开;
2、","表示定义子元素的顺序;
3、"|"表示子元素只能出现任意一个;

定义一个属性的格式为:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>

属性的类型:
CDATA类型:普通的字符串
属性的约束:
#REQUIRED:必须的
#IMPLIED:属性不是必须的
#FIXED value:属性值是固定的

schema约束

 DTD和schema的区别:

  1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名用.xsd
  2. 一个xml中可以引用多个schema约束文件,多个schema使用名称区分(名称空间类似java包名)
  3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持多个数据类型
  4. schema语法更加复杂

步骤

1,创建一个文件,这个文件的后缀名为.xsd。
2,定义文档声明
3,schema文件的根标签为:<schema>4,在<schema>中定义属性:
xmIns=http://www.w3.org/2001/XMLSchema5,在<schema>中定义属性 :targetNamespace=唯一的url地址指定当前这个schema文件的名称空间6,在<schema>中定义属性elementFormDefault="qualified表示当前schema文件是一个质量良好的文件7,通过element定义元素
8,判断当前元素是简单元素还是复杂元素
 

 示例:

<?xml version="1.0" encoding="UTF-8" ?>
<schema
        xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.dz666.cn/java"
        elementFormDefault="qualified"
>

    <element name="persons">
        <complexType>
            <sequence>
                <element name="person">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age" type="string"></element>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

sequence表示定义的名称标签需要按顺序来定义,先写name再写age

引入schema约束:

步骤:
1,在根标签上定义属性
xmIns="http://www.w3.org/2001/XMLSchema-instance'
2,通过xmns引入约束文件的名称空间
3,给某一个xmins属性添加一个标识,用于区分不同的名称空间格式为:xmins:标识=“名称空间地址”
标识可以是任意的,但是一般取值都是xsi
4,通过xsi:schemaLocation指定名称空间所对应的约束文件路径

示例:

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

<persons
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.dz666.cn/java"
        xsi:schemaLocation="http://www.dz666.cn/java person.xsd"
>

    <person>
        <name>艾斯</name>
        <age>23</age>
    </person>
</persons>

定义属性

必须要在sequence外complexType内

示例:
 

<?xml version="1.0" encoding="UTF-8" ?>
<schema
        xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.dz666.cn/java"
        elementFormDefault="qualified"
>

    <element name="persons">
        <complexType>
            <sequence>
                <element name="person">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age" type="string"></element>
                        </sequence>
<!--                        name:属性名,type:属性数据类型,use:required必须-->
                        <attribute name="id" type="string" use="required"></attribute>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>
<?xml version="1.0" encoding="UTF-8" ?>

<persons
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.dz666.cn/java"
        xsi:schemaLocation="http://www.dz666.cn/java person.xsd"
>

    <person id="001">
        <name>艾斯</name>
        <age>23</age>
    </person>
</persons>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值