xml

xml解析

1. 概念

可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的
限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。xml是当前处理结构化文档信息中相当给力的技
术,xml有助于在服务器之间穿梭结构化数据,这使得开发人员更加得心应手的控制数据的存储和传输。
Xml用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的
标记语言进行定义的源语言。Xml是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方
法来描述和交换独立于应用程序或供应商的结构化数据。

2. 特点与作用

2.1. 特点
xml与操作系统、编程语言的开发平台都无关;
现不同系统之间的数据交互。
2.2. 作用
3. 配置应用程序(servlet 配置,框架环境配置等)和网站
4. 数据交互;
5. Ajax基石

3. 基础语法

格式良好的 XML 文档需满足以下条件:
必须有XML声明语句
必须有且仅有一个根元素
标签大小写敏感
属性值用双引号
标签成对
元素正确嵌套
在这里插入图片描述
注:
1. xml声明一般是xml文档的第一行;
2. xml中,一些字符拥有特殊的意义。如果把字符“<”放在xml元素中,会发生错误,这是因为解析器会把它当作新元素的开始,这样会产生xml错误

if salary <100 then

为了避免这个错误,请用实体引用来代替“<”字符:

if salary < 100 then

xml中5个预定义实体
在这里插入图片描述
例如
使用XML描述下表中的学生成绩信息。XML文件为scores.xml
在这里插入图片描述


> <?xml version="1.0" encoding="utf-8" ?>  <scores> 
       <student> 
                <ID>1</ID> 
                <姓名>王同</姓名> 
                <课程>java</课程> 
                <成绩>89</成绩> 
      </student> 
       <student> 
               <ID>2</ID> 
               <姓名>李佳</姓名> 
              <课程>sql</课程> 
               <成绩>58</成绩> 
            </student>  
       </scores>

4. DTD技术

DTD即文档类型定义–Document Type Definition
• 使每个XML文件可以携带一个自身格式的描述
• 一个DTD文档可能包含如下内容:

  1. 元素的定义规则
  2. 元素之间的关系规则
  3. 属性的定义规则
    示例
    使用DTD验证描述诗集的XML文档

> <?xml version="1.0" encoding="utf-8" ?>  <!DOCTYPE poem [ 
                 <!ELEMENT poem (author,title,content) > 
                 <!ELEMENT author (#PCDATA)> 
                  <!ELEMENT title (#PCDATA)> 
                <!ELEMENT content (#PCDATA)> 
                  ]> 
       <poem>
       <author>王维</author> 
     <title>鹿柴</title> 
       <content>空山不见人,但闻人语声。返景入深林,复照青苔上。 
       </content>     
       </poem>

5. 引入DTD的方式(了解)

当验证的XML文件较多时,使用内部DTD可能出现冗余,此时可以通过引入dtd 文件进行xml 约束。

方式1


> <?xml version="1.0" encoding="utf-8" ?>  <!DOCTYPE poem [ 
                 <!ELEMENT poem (author,title,content) > 
                 <!ELEMENT author (#PCDATA)> 
                  <!ELEMENT title (#PCDATA)> 
               <!ELEMENT content (#PCDATA)> 
                  ]> 
       <poem>
       <author>王维</author> 
     <title>鹿柴</title> 
      <content>空山不见人,但闻人语声。返景入深林,复照青苔上。 
       </content>     
       </poem>

方式2

        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

6. Schema 技术(了解)

Shema规定xml文档实例的结构和每个元素/属性的数据类型。
理解:对于Schema来讲,我们可以将shema比喻成为是表结构。在表结构里,定义一些数据的限制要求。然后我们xml文档就相当于是数据表将来要存储的数据,也就是数据库里面的数据表数据了,所以整体来讲的话schema它就是用于验证xml文档的。


> <?xml version="1.0" encoding="utf-8" ?>  <xs:schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 targetNamespace="http://www.myschema.com.cn" 
 xmlns="http://www.myschema.com.cn"  elementFormDefault="qualified"> 
 <xs:element name="person">  <xs:complexType>  <xs:sequence> 
 <xs:element name="id" type="xs:integer"/>  <xs:element name="name"
 type="xs:string"/>  <xs:element name="sex" type="xs:string"/> 
 <xs:element name="address" type="xs:string"/>  </xs:sequence> 
 </xs:complexType> </xs:element>  </xs:schema>

在这里插入图片描述


> <?xml version="1.0" encoding="utf-8" ?>  <person
  xmlns="http://www.myschema.com.cn">  
 <id>1</id>  
 <name>admin</name> 
 <sex></sex>  
 <address>绿地伯顿</address>  
 </person>

7. xml解析

xml解析即将文件中的内容按照指定 的含义进行获取

在这里插入图片描述
7.1. Dom4J解析Xml(推荐)
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连Sun 的 JAXM 也在用 DOM4J。
Api文档参考地址: https://dom4j.github.io/
在这里插入图片描述
7.2. DOM4J 解析学生成绩信息 scores.xml
scores.xml

<?xml version="1.0" encoding="utf-8" ?> 
<students> 
<Student> 
<Name>张三</Name> 
<Num>2018001</Num> 
<Classes>0113</Classes> 
<Address>上海外国语</Address>
<Tel>123456</Tel> 
</Student> 
<Student> 
<Name>王五</Name> 
<Num>2018002</Num> 
<Classes>0114</Classes> 
<Address>上海外国语</Address> 
<Tel>657432</Tel> 
</Student> 
</students>

获得document 对象

SAXReader reader=new SAXReader();
Document document=reader.read(new File(“input.xml”));

操作xml文档节点


> Element rootElm=document.getRootElement();//获得根节点 
  Element memberElm=root.element("member"); //获得子节点 
  String  text=memberElm.getText();//获得节点文本 
  Element ageElm=newMemberElm.addElement("age");//添加子节点
  ageElm.setText("29");//设置节点文本 
  parentElm.remove(childElm);//)删除某节点

例子


> public static void main(String[] args) throws Exception{ 
SAXReader reader=new SAXReader(); 
Document document=reader.read(new File("src\\source.xml")); 
Element  rootElm=document.getRootElement();//获得根节点 
Element  memberElm=rootElm.element("Student"); //获得子节点 
Element  ageElm=memberElm.addElement("age");//添加子节点
ageElm.setText("29");//设置节点文本 
// 创建格式化类 
OutputFormat format = OutputFormat.createPrettyPrint(); 
// 设置编码格式,默认UTF-8
 format.setEncoding("UTF-8"); 
 //创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用 
 FileOutputStream fos = new FileOutputStream("src\\source.xml"); 
 // 创建xml输出流 
 XMLWriter writer = new XMLWriter(fos, format); 
 writer.write(document); 
 writer.close(); 
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值