XML
来源:互联网 发布:怎样评判数据库好坏 编辑:程序博客网 时间:2024/06/16 01:45
XML简介
- eXtensible Markup Language:可扩展标记型语言
html是用于显示数据,xml也可以显示数据(不是主要功能)
xml主要功能,为了存储数据
xml是w3c组织发布的技术
xml有两个版本 1.0 , 1.1(1.1版本不能向下兼容)- 标签定义
一个xml中,只能有一个根标签,其他标签都是这个标签下面的标签
在xml中把空格和换行都当成内容来解析,
xml中标签的名称规则
(1)xml代码区分大小写
(2)xml的标签不能以数字和下划线(_)开头
(3)xml的标签不能以xml、XML、Xml等开头
(4)xml的标签不能包含空格和冒号
- 注释
<!-- xml的注释 -->
2.特殊字符要转义:< <
> >
<![CDATA[ 内容 ]]>
xml约束
- 比如现在定义一个xml文件,只想要这个文件里面保存人的信息,
xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。dtd约束 和 schema约束dtd入门:
(1)看xml中有多少个元素 ,有几个元素,在dtd文件中写几个<!ELEMENT>
(2)判断元素是简单元素还是复杂元素
复杂元素:有子元素的元素<!ELEMENT 元素名称 (子元素)>
简单元素:没有子元素
<!ELEMENT 元素名称 (#PCDATA)>
(3)需要在xml文件中引入dtd文件
*<!DOCTYPE
根元素名称 SYSTEM “dtd文件的路径”>:使用外部的dtd文件
*<!DOCTYPE
根元素 PUBLIC “DTD名称” “DTD文档的URL”>使用dtd定义元素
语法:<!ELEMENT
元素名 约束>
简单元素:没有子元素的元素
<!ELEMENT
name (#PCDATA)>
(#PCDATA): 约束name是字符串类型
EMPTY : 元素为空(没有内容)
ANY:任意
复杂元素:
<!ELEMENT
person (name,age,sex,school)>
<!ELEMENT
元素名称 (子元素)>
表示子元素出现的次数:
+ : 表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次
子元素直接使用 | 隔开:表示元素只能出现其中的任意一个- 定义属性
语法:<!ATTLIST
元素名称
:属性名称 属性类型 属性的约束 >
属性类型- CDATA: 字符串
<!ATTLIST
birthday
ID1 CDATA #REQUIRED>
<!ATTLIST
age
ID2 (AA|BB|CC) #REQUIRED>
ID: 值只能是字母或者下划线开头
<!ATTLIST
name
ID3 ID #REQUIRED>
属性的约束
REQUIRED:属性必须存在
IMPLIED:属性可有可无
FIXED: 表示一个固定值 #FIXED “AAA”
XML解析
xml的解析方式:dom 和 sax
dom方式解析
根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象
缺点:如果文件过大,造成内存溢出
优点:很方便实现增删改操作
sax方式解析
采用事件驱动,边读边解析
从上到下,一行一行的解析,解析到某一个对象,返回对象名称
缺点:不能实现增删改操作
优点:如果文件过大,不会造成内存溢出,方便实现查询操作
- 不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供
- sun公司提供了针对dom和sax解析器 jaxp
- dom4j组织,针对dom和sax解析器 dom4j
- jdom组织,针对dom和sax解析器 jdom
jaxp的API
- jaxp解析器在jdk的javax.xml.parsers包里面
- 在document里面方法
getElementsByTagName(String tagname)
– 这个方法可以得到标签
– 返回集合 NodeList
createElement(String tagName)
– 创建标签
createTextNode(String data)
– 创建文本
appendChild(Node newChild)
– 把文本添加到标签下面
removeChild(Node oldChild)
– 删除节点
getParentNode()
– 获取父节点
getLength() 得到集合的长度
item(int index)下标取到具体的值
getTextContent()
- 得到标签里面的内容
DocumentBuilderFactory: 解析器工厂
- 这个类也是一个抽象类,不能new
newInstance() 获取 DocumentBuilderFactory 的实例。
* sax:
SAXParser:解析器类
SAXParserFactory: 解析器工厂
使用JAXP实现查询操作
1、创建解析器工厂
DocumentBuilderFactory.newInstance();
2 根据解析器工厂创建解析器
builderFactory.newDocumentBuilder();
3·解析xml返回document
Document document = builder.parse(“src/person.xml”);
4、得到所有的name元素
使用document.getElementsByTagName(“name”);
5、返回集合,遍历集合,得到每一个name元素
- 遍历 getLength() item()
- 得到元素里面值 使用 getTextContent()
- 步骤
1、创建解析器工厂
2、根据解析器工厂创建解析器
3、解析xml,返回document
4、得到所有name元素
5、使用返回集合,里面方法 item,下标获取具体的元素
NodeList.item(下标): 集合下标从0开始
6、得到具体的值,使用 getTextContent方法
添加标签: 4、得到第一个p1 - 得到所有p1,使用item方法下标得到 5、创建sex标签 createElement 6、创建文本 createTextNode 7、把文本添加到sex下面 appendChild 8、把sex添加到第一个p1下面 appendChild 9、回写xm
回写代码:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(“src/person.xml”))
- XML
- XML
- XML
- XML
- xml
- xml
- XML
- XML
- XML
- xml
- xml
- XML
- XML
- xml
- xml
- xml
- XML
- XML
- UVa10815 安迪的第一个字典
- [UVA297] Quadtrees 四叉树
- Action_立方体
- CollabNetSubversionEdge错误集合
- activity设置成dialog主题后去标题栏并设置弹出位置
- XML
- 统一资源管理与调度平台入门
- Spring@ResponseBody未生效,前端报404的解决办法
- 终于成功安装了win7 64位pygame
- 图像特征点检测与匹配评价——量化
- AndroidStudio 该版本的 %1 与您运行的 Windows 版本不兼容
- Android6.0权限获取
- AngularJS 入门
- 后台系统属性编写