XML基本介绍

1、什么是XML

XML是一种可扩展标记语言,它有良好的人即可读性,其基本结构,类似于我们的HTML文件,不过它的主要作用和HTML不同。

HTML文件主要用于网页的展示,而XML的作用,更注重数据的记录。还有一些Java工程的配置文件。比如我们的Java-web项目中的web.xml文件。

2、XML的基本结构

  1. xml第一行一般是一行申明。<?xml version=“1.0” encoding=“UTF-8”>
  2. xml有且仅有一个跟元素。
  3. xml的结构类似html文件。
  4. 针对特殊字符的处理,xml有两种处理方式:实体引用、CDATA标签。

一个基本的XML结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<hr>
    <employee>
        <name>张三</name>
        <age>24</age>
    </employee>
    <employee>
        <name>李四</name>
        <age>28</age>
    </employee>
</hr>
特殊字符的处理:实体引用

实体引用就是当你使用特殊字符的时候(比如 > 、< 等字符),破坏了原本xml文档的基本语法结构,从而可以使用其他的特殊字符进行代替的行为。

$gt; 代表 >
$lt; 代表 <
$amp; 代表 &
$apos; 代表 ’
$quot; 代表 "

<shop-car>
	<goods>
		<name>Mac Pro<name>
		<num>1</num>
		<price>13118</price>
	</goods>
	<goods>
		<name>Iphone X<name>
		<num>4</num>
		<price>8000</price>
	</goods>
	<info>Iphone &gt; Mac Pro</info>
</shop-car>
特殊字符的处理:CDATA标签

基本逻辑就是,当你遇到不想被xml解析的片段,就使用CDATA标签包裹起来。

语法:<![CDATA[ 内容部分 ]]>

其中内容部分的东西,就不会被xml文档解析。

<content>
	下面学习a标签的使用:
	<![CDATA[ 
	<a href="www.baidu.com">去百度</a>
	]]>
</content>

这样,a标签这一段就不会被xml进行解析。

3、XML语义约束

XML文档,写的规范不规范,需要进行约束,这个约束有两种约束方式,一种是DTD、一种是XML Schema文件。

DTD(Document Type Defination)

DTD的语义约束规则如下:

  1. <!ELEMENT hr (employee)>,表示hr下面有一个employee节点。
  2. <!ELEMENT employee (name, age, salary)>,表示employee节点下面有name、age、salary三个节点。
  3. <!ELEMENT name (#PCDATA)>,表示name节点下的内容是文本。
  4. 关于节点数量的描述:+ 代表至少一个节点,* 代表至少0个节点,? 代表0个或者1个节点。
<!ELEMENT hr (employee+)>

一个DTD约束文件示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+) >
<!ELEMENT employee (name,age,salary,department)>
<!ATTLIST employee no CDATA "">
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dname,address)>
        <!ELEMENT dname (#PCDATA)>
        <!ELEMENT address (#PCDATA)>
XML Schema
  1. 使用schema作为xsd文件的跟节点
  2. 使用element来表示一个节点,它有一个name属性,表示节点名。
  3. complexType表示节点的类型为混合节点。
  4. complexType内部,使用sequence确保子节点是有序的。
  5. simpleType表示是一个简单类型的节点
  6. element的type属性,表示当前节点的文本类型的值。
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="hr">
        <complexType>
            <sequence>
                <element name="employee">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age">
                                <simpleType>
                                    <restriction base="integer">
                                        <minExclusive value="18"></minExclusive>
                                        <maxExclusive value="65"></maxExclusive>
                                    </restriction>
                                </simpleType>
                            </element>
                            <element name="salary" type="integer"></element>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

4、xml文件的读取

使用DOM4j进行XML解析。DOM4j要求是java8以上的版本。

核心代码如下:

SAXReader reader = new SAXReader();
Document document = reader.read(path);
Element root = document.getRootElement();
List<Element> employees = root.elements("employee");
for (Element employee: employees) {
                Element name = employee.element("name");
                String empName = name.getText();
                System.out.println(empName);
                System.out.println(employee.elementText("age"));
                System.out.println(employee.elementText("salary"));
                Element department = employee.element("department");
                System.out.println(department.element("dname").getText());
                System.out.println(department.element("address").getText());
                Attribute att = employee.attribute("no");
                System.out.println(att.getText());
 }

写入相关的API:

SAXReader reader = new SAXReader();
Document document = reader.read(path);
Element root = document.getRootElement();
Element employee = root.addElement("employee");
employee.addAttribute("no", "3311");
employee.addElement("name").setText("李铁柱");
employee.addElement("age").setText("23");

Writer writer = new OutputStreamWriter(new FileOutputStream(path) , "UTF-8");
document.write(writer);

Xpath表达式

在这里插入图片描述

Jaxen

Jaxen是一个java编写的Xpath开源库。
Jaxen底层依赖于DOM4j

SAXReader reader = new SAXReader();
Document document = reader.read(path);
List<Node> nodes = document.selectNodes();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值