/*页首的跳转连接,*/

XML笔记

 


慕课网学习笔记——XML 加油吧

 

XML是什么

  • XML的全称是EXtensible Markup Language,可扩展标记语言
  • 编写XML就是编写标签,与HTML非常相似,扩展名.xml
  • 具有良好的人机可读性

 

XML与HTML的比较

  • 两者相似
  • XML没有预定义标签,HTML存在大量预定义标签
  • XML重在保存和传输数据,HTML用于显示数据

 

 

 

XML的用途(web应用配置文件)

  • java程序的配置描述文件
  • 用于保存程序的产生数据
  • 网络间的数据传输

 

 XML文档结构

  • 第一行必须是XML声明
  • 有且只有一个根节点
  • XML标签的书写规则与HTML相同

 

XML声明

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

version="1.0"版本号   

encoding="UTF-8"设置字符集,用于支持中文

 

我的第一份XML文档

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- 人力资源管理系统 -->
 3 <hr>
 4     <employee no="100">
 5         <name>张三</name>
 6         <age>31</age>
 7         <salary>4000</salary>
 8         <department>
 9             <dname>会计部</dname>
10             <address>XXX</address>
11         </department>
12     </employee>
13     
14     <employee no="101">
15         <name>李四</name>
16         <age>31</age>
17         <salary>3000</salary>
18         <department>
19             <dname>工程部</dname>
20             <address>XXX</address>
21         </department>
22     </employee>
23 </hr>
hr

XML标签书写规则

合法的标签名

标签名有意义

建议使用英文,小写字母,单词之间使用"-"分割 

建议多级标签不要重名

适当的注释与缩进

  适当的注释与缩进可以让XML文档更容易阅读

合理使用属性  

  标签属性用于描述标签不可或缺的信息

  对标签分组或者为标签设置Id时常用属性表示

处理特殊字符

标签体,出现"<"、">"特殊字符,会破坏文档结构

解决方法1:使用实体引用

解决方法2:使用CDATA标签

  CDATA指的是不应由XML解析器进行解析的文本数据

  从<![CDATA[XXX]]>    <!CDATA[[]]>

有序的子元素

  在XML多层嵌套的子元素中,标签前后顺序应保持一致

 

XML语义约束

  XML文档结构正确,但可能不是有效的

  XML语义约束有两种定义方式:DTD与XML Schema

 

Document Type Definition

  DTD文档类型定义,是一种简单易用的语义约束方式

  扩展名为.dtd

 

DTD定义节点

 

 

DTD定义节点数量

 

 

XML引用DTD文件

<!DOCTYPE 根节点 SYSTEM "dtd文件路径"

 

创建DTD文件,编写第一个DTD文件

 

 

 XML Schema

 

 

 第一个XML Schema

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <schema xmlns="http://www.w3.org/2001/XMLSchema">
 3     <element name="teaching-plan">
 4         <complexType>
 5             <sequence>
 6                 <element name="course" minOccurs="1" maxOccurs="100">
 7                     <complexType>
 8                         <sequence>
 9                             <element name="course-name" type="string"></element>
10                             <element name="class-hour">
11                                 <simpleType>
12                                     <restriction base="integer">
13                                         <minInclusive value="20"></minInclusive>
14                                         <maxInclusive value="110"></maxInclusive>
15                                     </restriction>
16                                 </simpleType>
17                             </element>
18                             <element name="exam-form" type="string"></element>
19                         </sequence>
20                      </complexType>
21                 </element>
22             </sequence>
23             <attribute name="id" type="string" use="required"></attribute>
24          </complexType>
25     </element>
26 </schema>
XML Schema

 

 DOM文档对象模型

  

 

 

Dom4j

 

 

 利用Dom4j读写xml文件

plan.xml

xml
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE plan SYSTEM "plan.dtd">
 3 <teaching-plan>
 4     <course>
 5         <course-name>大学英语</course-name>
 6         <class-hour>36</class-hour>
 7         <exam-form>考试</exam-form>
 8     </course>
 9     <course>
10         <course-name>高等数学</course-name>
11         <class-hour>70</class-hour>
12         <exam-form>考试</exam-form>
13     </course>
14     <course>
15         <course-name>计算机应用基础</course-name>
16         <class-hour>108</class-hour>
17         <exam-form>上机考试</exam-form>
18     </course>
19     <course>
20         <course-name>科学</course-name>
21         <class-hour>60</class-hour>
22         <exam-form>考试</exam-form>
23     </course>
24 </teaching-plan>

读取

 1 package com.imooc.dom4j;
 2 
 3 import java.util.List;
 4 
 5 import org.dom4j.Document;
 6 import org.dom4j.DocumentException;
 7 import org.dom4j.Element;
 8 import org.dom4j.io.SAXReader;
 9 
10 public class PlanReader {
11     public void readxml() {
12         String file="f:/workspace/xml/src/plan.xml";
13         SAXReader reader=new SAXReader();
14         try {
15             Document document=reader.read(file);
16             //获取XML文档的根节点,即hr标签
17             Element root=document.getRootElement();
18             List<Element> courses=root.elements("course");
19             for(Element course:courses ) {
20                 Element courseName=course.element("course-name");
21                 String n=courseName.getText();//getText()方法用于获取标签文本
22                 System.out.println(n);
23                 System.out.println(course.elementText("class-hour"));
24                 System.out.println(course.elementText("exam-form"));
25             }
26         } catch (Exception e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         }
30     }
31     
32     public static void main(String[] args) {
33         PlanReader reader=new PlanReader();
34         reader.readxml();
35     }
36 }
读xml

写入

 1 package com.imooc.dom4j;
 2 
 3 import java.io.FileOutputStream;
 4 import java.io.OutputStreamWriter;
 5 import java.io.Writer;
 6 
 7 import org.dom4j.Document;
 8 import org.dom4j.DocumentException;
 9 import org.dom4j.Element;
10 import org.dom4j.io.SAXReader;
11 
12 public class PlanWriter {
13     public void writexml() {
14         String file="f:/workspace/xml/src/plan.xml";
15         SAXReader reader=new SAXReader();
16         try {
17             Document document=reader.read(file);
18             Element root=document.getRootElement();
19             Element course=root.addElement("course");
20             course.addElement("course-name").setText("科学");
21             course.addElement("class-hour").setText("60");
22             course.addElement("exam-form").setText("考试");
23             
24             Writer writer=new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
25             document.write(writer);
26             writer.close();
27         } catch (Exception e) {
28             // TODO Auto-generated catch block
29             e.printStackTrace();
30         }
31     }
32     public static void main(String[] args) {
33         PlanWriter planWriter=new PlanWriter();
34         planWriter.writexml();
35     }
36 }
读取

 

XPath路径表达式

 

XPath基本表达式+谓语表达式

 

 

 

 

 

 

 

XPath实验室

利用Dom4j开发"XPath实验室",一起见证XPath神器之处

 

Jaxen介绍

 

 

 tip:

我们在访问jaxen.codehaus.org时,由于服务器在国外,我们无法访问,

解决办法是访问阿里云提供的平台:aliyun.com,进行下载

 最后练习:

利用XPath对存储课程信息的plan.xml文档进行查询并将结果输出,要求如下:

  1. 获取所有课程信息

  2.  查询课时小于50的课程信息

  3. 查询课程名为高等数学的课程信息

  4.  查询属性id为001的课程信息

  5. 查询前两条课程信息

 

package com.imooc.dom4j;

import java.util.List;

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

public class XPlan {
    public void xplan(String xpathExp) {
        String file ="f:/workspace/xml/src/plan.xml";
        //SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中
        SAXReader reader=new SAXReader();
        try {
            Document document=reader.read(file);
            List<Node> nodes=document.selectNodes(xpathExp);
            for(Node node:nodes) {
                Element course=(Element)node;
                System.out.println(course.attributeValue("id"));
                System.out.println(course.elementText("course-name"));
                System.out.println(course.elementText("class-hour"));
                System.out.println(course.elementText("exam-form"));
                System.out.println("==============");
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        XPlan testor=new XPlan();
        testor.xplan("//course");
        testor.xplan("//course[class-hour<50]");
        testor.xplan("//course[course-name='高等数学']");
        testor.xplan("//course[@id='001']");
        testor.xplan("//course[position()<3]");
    }
}
Xplan

 

 

 

 

 

 

 

 

 

posted @ 2020-02-07 15:00  奇奇锋  阅读(181)  评论(0编辑  收藏  举报
/* 看板娘 */