XML

1.xml简介

1.extensible Markup Language 可扩展标记型语言

  • 标记型语言:html都是使用标签
  • 可扩展型语言 html的标签都是固定的,每个标签都有特定的含义
    标签可以自己定义 可以写中文标签
    <person><person/>
  • 2.xml用途
    html是用于显示数据,xml也可以显示数据(不是主要功能)
    xml主要功能,为了存储数据
  • 3.xml是w3c组织发布的技术
  • 4.xml有两个版本 1.0 1.1

2.xml应用

  • 不同的系统之间传输数据


    数据传输的格式使用xml.jpg
  • 用于表示生活中有关系的数据

  • 经常用在配置文件
    如果要修改数据库信息,不需要修改源代码,只需要修改配置文件就可以了

3.xml的语法

1.xml的文档声明

  • 创建一个文件后缀名为.xml
  • 如果写 xml,必须要有一个文档声明
   <?xml version="1.0"  encoding="utf-8"?>

文档声明必须写在第一行第一列

  • 属性
    version xml 的 版本 1.0
    encoding xml 编码 gbk utf-8
    standalone 是否需要依赖其他文件
    yes/no (不常用)
    2.定义元素(标签)

  • 标签定义必须有开始,有结束

  • 标签没有内容,可以在标签内结束 例如: <abc/>

  • 标签可以嵌套,必须要合理嵌套

  • 一个 xml中只有一个根标签,其他标签都是都是这个标签下面的标签

  • xml 中把空格和换行都当成内容来解析

下面两段代码的含义是不相同的

<bb>11111</bb>

<bb>
     11111
</bb>
  • xml 的命名规则
  • 区分大小写
  • 不能以数字,下划线开头
  • 不能以 xml XML Xml 开头
    <xmla>,<XMLb> 这些都不正确
  • 不能包含空格和冒号
    3.定义属性
  • 一个标签上可以有多个属性
<persion id1='aaa' id2='bbb'> </persion>
  • 属性名称不能相同
<persion id1='aaa' id1='bbb'> </persion>

错误,不能有两个id1

  • 属性名称与属性值之间要用=“属性值”(引号可为单引号或者双引号)
  • xml 属性的名称规范和标签的属性规范一致
    4.注释
<!--  -->
  • 注释不能嵌套
  • 注释不能放在第一行,第一行必须放文档声明
    5.特殊字符


    转义字符.jpg

    6.CDATA区

  • 可以解决有多个字符都需要转义的操作 if(a<b && b<c && d>f) {}
  • 把这些内容放到CDATA区里面,不需要转义
    写法
<! [ CDATA [ 内容 ] ] >

把特殊字符当成文本显示
7.PI指令(处理指令)

  • 可以在xml中设置样式
    写法
<?xml-stylesheet type="text/css" href="name.css"?>
  • 设置样式只能对英文标签起作用,对中文标签不起作用。


    PI处理指令.jpg

8.xml语法的总结

  • 所有xml元素都必须有关闭标签
  • xml标签对大小写敏感
  • xml必须正确的嵌套顺序
  • xml文档必须有跟元素
  • xml的属性必须加引号
  • 特殊字符必须转义——CDATA
  • xml 中的空格,回车换行会解析是被包留

2.xml的约束

  • 为什么需要约束?
    比如现在定义一个person的xml文件,只要这个文件里保存人的信息,比如name,age等,但是如果在xml文件中写了一个标签<猫><猫/>,发现可以正常显示,因为符合语法规范但是猫肯定不是人的信息,xml的标签是自定义的需要字数来规定
  • xml的约束技术
    DTD约束与schema约束
    1.DTD快速入门
    创建一个文件 后缀名 .dtd
    步骤
  • 1.看xml中有多少个元素,在dtd文件中写几个<!ELEMENT>
  • 2.判断元素是简单元素还是复杂元素
    -简单元素:没有子元素
    <!ELEMENT 元素名称(#PCDATA)>
    -复杂元素:有子元素的元素
    <!ELEMENT 元素名称(元素名称)>
  • 3.需要在xml文件中引入DTD文件
    <!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">
    DTD快速入门.jpg

    打开xml文件使用浏览器打开,浏览器只负责校验xml的语法,不负责校验约束
    如果想要校验xml的约束,需要实用工具(myeclipse工具)
    创建一个项目 day05
    在day05的目录下创建一个xml文件和dtd文件
    在xml中引入dtd文件之后多写一个标签之后多写了一个a,会提示出错
    dtd.jpg
xml.jpg

DTD的三种引入方式

  • 1引入外部dtd文件
<!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">
  • 2.使用内部的DTD文件


    使用内部DTD文件.jpg
  • 3.使用网络的DTD文件
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的UPL">

-后面学到框架 struts2 使用配置文件 使用外部dtd

使用DTD定义元素

语法

<!ELEMENT 元素名 约束>
  • 简单元素 没有子元素的元素
<!ELEMENT 元素名称(#PCDATA)>

(#PCDATA):约束name是字符串类型
EMPTY:元素为空(没有内容)

EMPTY.jpg

ANY:元素可以任意

  • 复杂元素:
<!ELEMENT person (name,age,sex,school)>

-子元素只能出现一次
<!ELEMENT 元素名称 (子元素)>

<!ELEMENT person (name+,age?,sex*,school)>

+:表示1次或者多次
?:表示出现0次或者1次
*:表示0次或者多次
子元素直接使用逗号隔开:顺序不可颠倒
子元素直接使用竖线隔开:只能出现子元素中其中一个


元素(ELEMENT)定义.jpg

使用DTD定义属性

语法
<!ATTLIST 元素名称
属性名称 属性类型 属性的约束>

  • 属性类型
    -CDATA 字符串类型
<!ATTLIST brith
    ID1 CDATA #REQUIRED>

-枚举:只能在一定范围内出现值,但是只能每次出现一种值
红路灯的效果
(aa|bb|cc)

<!ATTLIST age 
ID2 (AA|BB|CC) #REQUIRED>

-ID:值只能是字母或者下划线开头

<!ATTLIST name
ID3 ID #REQUIRED>
  • 属性的约束
    #REQUIRED:属性必须要有
    #IMPLIED:属性可有可无
    #FIXED:表示一个固定的值 #FIXED "ABC"
<!ATTLIST sex 
ID4 CDATA #FIXED "XBW">

-直接值
不写属性,使用直接值
写属性,使用写的属性值

<!ATTLIST school
ID5 CDATA "WWW">

实体的定义

语法

<!ENTITY 实体名称 "实体的值">
<!ENTITY TEST "NIHAO">

使用实体:&实体名称;
注意:一般写在外部dtd文件内

实例

TV.DTD.jpg

TV.XML.jpg

xml解析简介(写到java代码)****

  • xml标记型文档
  • js使用dom解析标记文档
    -根据html的层级结构,在内容中分配一个书型结构,把html的标签,属性和文本都封装成对象
    -doucoment element 属性对象 文本对象 属性和文本都封装成对象
  • xml的解析方式(技术):dom 和 sax
    dom和sax解析xml文件.jpg
  • dom方式解析
    -根据xml的层级结构在内容中分配一个树形结构,把xml的标签,属性和文本都封装成对象
    -缺点:内容过大造成内存溢出
    -优点:很方便实现增删改操作
  • sax方式解析:
    -采用事件驱动,边读边解析
    从上到下,一步一步解析,解析到某一个对象,返回对象名
    -缺点:不能实现增删改操作
    -优点:如果文件过大,不会造成内存溢出,方便实现查询操作

jaxp的dpi的查看

jaxp是javase的一部分

  • jaxp解析器在jdk的javax.xml.parse包里面
    四个类:分别是针对 dom和 sax 解析使用的类
  • dom:
    documentBuilder:解析器类

1.这个类是一个抽象类,不能 new
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder()方法获取

2.一个方法,可以解析 xml parse(“xml 路径”)返回是 Document 整个文档

3.返回的 document 是一个接口,父节点是 Node ,如果在 document里面找不到想要的方法,到 Node 里面去找

4.在document里面方法

getElementsByTagName(String tagname)

——这个方法可以得到标签
返回集合NodeList

createElements(String tagname)

——创建标签

createTextNode(String data)
——创建文本
appendChild(Node oldchild)
——把文本添加到标签下面
removechild(Node oldchild)
——删除节点
getparentNode()

——获取父节点

NodeList
getLength()得到集合的长度
item (int index)下标取到具体的值
遍历:

for(int i=0;i<list.getLength();i++){
list.item(i);
}

DocumentBuilderFactory:解析器工厂
——这个类也是一个抽象类,不能 new
newInstance () 获取 DocumentBuildertory 的实例。

sax :
SAXParser:解析器类
SAXParserFactory:解析器工厂

使用jaxp查询所有name元素的值

1.创建解析器工厂

DocumentBuilderFactory buliderFactory = DocumentBuilderFactory.newInstance();

2.根据解析器工厂解析解析器

DocumentBuilder builder = builderFactory.newDocumentBilder();

3.解析xml返回document

Document document = bulider.parse("src/person.xml");

4.得到所有的name元素

NodeList list = document.getElementsByTagName("name");

5.遍历集合得到每一个那么元素

    for(int i = 0;i<list.getLength();i++){
            Node name1 = list.item(i);
            String s = name1.getTextContent();
            System.out.println(s);
        }

使用 jaxp 添加节点

在第一个 p1 下面(末尾) 添加<sex>nv</sex>
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到第一个 p1
——得到所有 p1 ,使用 item 方法下标得到
5.创建 sex 标签 createTextNode
6.创建文本 createTextNode
7.把文本添加到 sex 下面 appendChild
8.把 sex 添加到第一个 p1 下面 appendChild
9.回写 xml

使用 jaxp 修改节点

修改 第一个 p1 下面的sex内容是nan
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到 sex item 方法
5.修改sex里面的值 ——setTextContent方法
6.回写 xml

//回写 xml
TransformerFactory transformerFactory=TransformerFactory .newInstance();
Tranaformer transformer=transformerFactory.new Transformer();
transformer .transform(new DOMSource(document),new StreamResult("src/person.xml");

使用 jaxp 删除节点

删除 <sex>nan</sex>节点
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document

获取 sex 元素
5.获取 sex 的父节点 使用 getParentNode 方法
6.删除使用父节点 removechild 方法
7.回写 xml

使用 jaxp 遍历节点

步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到根节点
5.得到根节点子节点
6.得到根节点子节点的子节点
遍历的方法:

private static void list1(Node node){
//判断是元素类型的时候才打印
if(node.getNodeType()==Node,ELEMENT_NODE){
System.out.println(node.getNodeName());
}
//得到一层子节点
NodeList list =node.getChildNodes();
//遍历 list
for(int i=0;i<list.getLength();i++)
//得到某一个节点
Node node1 =list.item(i);
//node1.getChildNodes()
list1(node1);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 经过两天的奋战,终于把xml简略的过了一遍。 1.1XML介绍 xml是Extensible Markup lan...
    Ystrator阅读 801评论 0 2
  • 一、XML介绍 XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言...
    圣贤与无赖阅读 1,112评论 2 3
  • 课程内容:XML 安装MyEclipse开发工具 * 破解(看图) * 配置 * 配置工作空间的编码(UTF-...
    流年划破容颜_cc55阅读 1,171评论 0 2
  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,894评论 1 7
  • xml经典总结 XML(eXtensible Markup Language)是万维网联盟(World Wide ...
    java日记阅读 939评论 0 2