1.xml(可扩展标记语言)的概述
与html的区别:
xml: 描述数据,用于存储和传输数据。标签都是自定义的
html:显示数据,标签都是预定义的
注意事项:
文档声明必须在第一行
只有一个根标签
元素只能包裹嵌套,不能交叉嵌套
注释不能嵌套
标签命名规则:字母、数字、下划线、减号、英文句点组成,严格区分大小写
属性值要用单引号或双引号
2.约束文档
1.DTD(Document tyte definition)--->约束xml的书写规范
a DTD文件的书写
<?xml version="1.0" encoding="UTF-8"?> //文档声明
<!ELEMENT 书架 (书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
b DTD文件的引入
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd"> //可以在xml文件创建时自动生成
<书架>
<书>
<书名></书名>
<作者></作者>
<售价></售价>
</书>
</书架>
2.Schema的概述:--->符合xml语法,拓展名.xsd
对比 Schema 和 DTD
a.XML Schema符合XML语法结构。
b.DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
c.XML Schema对名称空间支持得非常好。
d.XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
e.XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
约束文档: <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' //标准名称空间 xmlns意思为xml名称空间
targetNamespace='http://www.itheima.com'> //自定义名称空间
<xs:element name='书架'> //约束根标签
<xs:complexType> //表示根标签为复杂类型,可以有子标签
<xs:sequence maxOccurs='unbounded'> //表示子元素有顺序 属性为unbounded表示子标签的数量不限
<xs:element name='书'>
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
引入约束文档:
<?xml version="1.0" encoding="UTF-8"?>
<itheima:书架 xmlns:itheima="http://www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com book.xsd">
<书>
<书名>书名</书名>
<作者>作者</作者>
<售价>售价</售价>
</书>
</itheima:书架>
3.XML的解析
解析的含义: 采用Java代码操作(增,删,改,查)我们的XML文件里面的内容.
常见的解析方式:
DOM:把所有的节点数据,全部加载到内存当中.解析方便,容易出现内存溢出
SAX:逐个节点进行解析,不会出现内存溢出,解析较为繁琐.
提供的解析操作:
JAXP:sun公司提供
DOM4j:开源框架,需要导入jar包
4.Dom4j常用的方法:
a需要导入jar包
b创建对应的document对象----> dom4j-1.6.1---docs---index.html---quick start---Creating a new XML document
SAXReader reader = new SAXReader(); //获取解析器对象
Document document = reader.read(url); //通过解析器获取文件对象,参数url为xml的文件路径的字符串
重要方法:Element getRootElement() //通过文件对象,获取根标签对象
Element
创建元素对象的方式:
DocumentHelper.CreatElement(String name); //创建一个新的元素对象,参数为要创建的对象的名称
常用方法
获取方法:
获取文本/属性:
String attributeValue(String name): //根据指定的属性名称获取其对应的值
String getText() : //获取当前元素对象的文本
String elementText(String name) //获取名称为name的子元素中的文本
获取子元素对象:
Element element(String name): //获取元素名称为name的子元素对象,如果有重复,返回第一个
List elements() : //获取所有的子元素
List elements(String name): //获取元素名称为name的所有子元素集合
获取父元素对象
Element getParent();
添加元素
add(Element e) //添加子元素
修改文本、属性:
void setText(String text): //设置当前元素对象的文本
Element addAttribute(String name,String value): //根据指定的属性名称和值进行添加或者修改 参数为属性名和属性值
删除方法:
remove(Element e); //删除子元素,参数为元素对象
将文件写入XML文件中
//获取格式化对象
OutputFormat format=OutputFormat.createCompactFormat();
//获取字节流
FileOutputStream fos=new FileOutputStream(path);
//获取写xml对象
XMLWriter xw=new XMLWriter(fos,format);
//写文件
xw.write(d); //参数为文件对象