13、XML

XML:eXtensible Markup Language 可扩展标记语言 version="1.0"

1、可扩展:所有的标签都是自定义的

2、功能

(1)数据存储

1.配置文件(常用)

2.数据传输(少)

3、html与xml区别

(1)html语法松散,xml语法严格

(2)html做页面展示,xml做数据存储

(3)html所有标签都是预定义的,xml所有标签都是自定义的

W3C:word wide web consortiem  万维网联盟

一、XML语法

1、文档声明

(1)必须写在xml文档的第一行

(2)写法:<?xml version="1.0" ?>

(3)属性:

1.version:版本号 固定值 1.0

2.encoding:指定文档的码表。默认值为 iso-8859-1

3.standalone:指定文档是否独立  yes 或 no

2、元素

xml文档中的标签

(1)文档中必须有且只能有一个根元素

(2)元素需要正确闭合。<body></body> <br/>

(3)元素需要正确嵌套

(4)元素名称要遵守

1.元素名称区分大小写

2.数字不能开头

3、文本

(1)转义字符:&gt;

(2)CDATA: 里边的数据会原样显示

*  <![CDATA[ 数据内容 ]]>

4、属性

属性值必须用引号引起来。单双引号都行

5、注释

<!-- -->

6、处理指令(现在基本不用 )

<?xml-stylesheet type="text/css" href="1.css"?>

二、XML约束

1、约束

xml的书写规则

2、约束的分类

(1)dtd

dtd分类:

1.内部dtd:在xml内部定义dtd

2.外部dtd:在外部文件中定义dtd

(1)本地dtd文件:<!DOCTYPE students SYSTEM  "student.dtd">

(2)网络dtd文件:<!DOCTYPE students PUBLIC "名称空间"  "student.dtd">

(2)schema

导入xsd约束文档步骤

1.编写根标签

2.引入实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

3.引入名称空间 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"

4. 引入默认的名称空间

三、XML解析

1、解析xml

(1)如果xml作为配置文件:读取

(2)如果xml作为传输文件:写,读

2、xml解析思想

(1)DOM

将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象

优点:因为,在内存中会形成dom树,可以对dom树进行增删改查

缺点:dom树非常占内存,解析速度慢

Document 、 Element 、Text 、Attribute 、Comment

(2)SAX

逐行读取,基于事件驱动

优点:不占内存,速度快

缺点:只能读取,不能回写

3、xml常用的解析器

(1)JAXP(用得少)

sun公司提供的解析。支持dom和sax

(2)JDOM,不火

(3)DOM4J

dom for java民间方式,但是是事实方式,非常好。支持dom

1.导入jar包 dom4j.jar

2.创建解析器

SAXReader reader = new SAXReader();

3.解析xml 获得document对象

Document document = reader.read(url);

查看说明文档中index目录

导入dom4j-1.6.1.jar包,不用build path,XML文件放在src下与包同级

 1 public class TestDom4j {
 2     @Test  // 1、得到某个具体的节点内容,第2本书的书名
 3     public void test1() throws DocumentException {
 4         SAXReader reader = new SAXReader();  // 创建XML解析对象
 5         Document document = reader.read("src/Book.xml");  // 把xml文档加载到document
 6         Element rootElement = document.getRootElement();  // 根节点
 7
 8         Element bookNode = rootElement.element("书");  // 获取“书”节点
 9         System.out.println(bookNode.getName());  // 获取书节点的名字
10
11         List list = rootElement.elements();  // 得到当前所有子节点
12         Element secondBook = (Element) list.get(1);  // 得到第二本书对象
13         String name = secondBook.element("书名").getText();  // 得到当前节点文本内容,标签的内容
14         System.out.println(name);
15     }
16
17     @Test  // 遍历所有元素节点
18     public void test2() throws DocumentException {
19         SAXReader reader = new SAXReader();
20         Document document = reader.read("src/Book.xml");
21         Element root = document.getRootElement();
22         // 遍历节点
23         treeWalk(root);
24     }
25
26     // 遍历节点,输出开始标签
27     private void treeWalk(Element element) {
28         System.out.println(element.getName());  // 输出当前节点的名字
29         for(int i=0; i < element.nodeCount(); i++) {  // nodeCount()得到当前节点的所有子节点
30             Node node = element.node(i);  // 取出下标为i的节点
31             if(node instanceof Element) {  // node是Element类的实例,判断当前节点是否标签
32                 treeWalk((Element) node);  // 把node强转为节点
33             }
34         }
35     }
36 }

(4)XPATH

专门用于查询

1.定义了一种规则

2.使用的方法

(1)selectSingleNode()

(2)selectNodes()

3、使用步骤

(1)导包

(2)创建解析器

SAXReader reader = new SAXReader();

(3)解析xml 获得document对象

Document document = reader.read(url);

XPath

1、nodename 选取此节点。

2、/     从根节点选取。

3、//     从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

4、..     选取当前节点的父节点。

5、@     选取属性。

6、[@属性名]    属性过滤

7、 [标签名]     子元素过滤

 1 public class TestXPath {
 2     @Test
 3     public void test1() throws DocumentException {
 4         SAXReader read = new SAXReader();
 5         Document document = read.read("src/Book.xml");
 6         Node node = document.selectSingleNode("/书架/书[2]/书名");  // 从1开始
 7         System.out.println(node.getText());
 8     }
 9
10     @Test
11     public void test2() throws DocumentException {
12         SAXReader read = new SAXReader();
13         Document document = read.read("src/Book.xml");
14         List list = document.selectNodes("//*");  //   //*当前目录下所有子节点
15         // 遍历所有节点
16         for(int i=0; i < list.size(); i++) {
17             Node node = (Node) list.get(i);
18             System.out.println(node.getName()+"\t"+node.getText());
19         }
20     }
21 }
时间: 2024-11-02 18:23:03

13、XML的相关文章

python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

.title { background-color: #000000; color: #00f508 } 一.shelve模块 1 import shelve 2 3 # 基于pickle模块, 4 5 d = shelve.open('shelve_test') 6 7 8 class Test(object): 9 def __init__(self, n): 10 self.n = n 11 12 t1 = Test(123) 13 t2 = Test(456) 14 name = ['a

HTML、XML 等 Dom 结点类解析库Jsoup

Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 特点: HTML.XML.自定义DOM格式文本解析: 可操作HTML元素.属性.文本: 适用于采集解析网站HTML: DOM解析功能强大. 开源库jsoup-1.8.1.jar,基本用法: 1 package com.zhang.jsoupdemo; 2 3 import android.os.Enviro

NHibernate生成实体类、xml映射文件

最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为实体类命名空间. 第三行为保存生成类.xml文件选择文件夹. 1 private void btnConnect_Click(object sender, RoutedEventArgs e) 2 { 3 try 4 { 5 using (OracleConnection conn = new Or

0505.Net基础班第二十二天(委托、XML和播放器项目)

01索引器 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _01索引器 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Person p = new Person(); 14 p

SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-convert.html 目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-in

.NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigurationSource和IniConfigurationSource. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录一.FileConfigurationSource  & FileConfigurationProvider 二.JsonConfigurationSou

深入了解三种针对文件(JSON、XML与INI)的配置源

深入了解三种针对文件(JSON.XML与INI)的配置源 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigurationSource和IniConfigurationSource. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录一.FileConfigurationSource  & FileConfigurationPr

python基础篇【第七篇】模块补充、xml操作

一.ConfigParser模块 用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser. 配置文件的格式是: []包含的叫section,    section 下有option=value这样的键值 [section1] k1 = v1 k2:10 [section2] k1 = v1 读取配置文件: -read(filename) 直接读取ini文件内容-sections() 得到所有的section,并以列表的形式返回-options(s

SpringMVC 中整合JSON、XML视图

SpringMVC中整合了JSON.XML的视图,可以通过这些视图完成Java对象到XML.JSON的转换.转换XML提供了MarshallingView,开发者只需用注入相应的marshaller.和属性配置,即可自动完成Java的Model对象中的数据到XML的编组. Email:[email protected] Blog:http://blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ 一. 准备工作 1. 本次程序会涉及到Jackson.