功能:数据存储
数据传输
html 与 xml 区别
2、xml语法:
version 版本号 固定值1.0
encoding 指定文档的码表 默认值为iso-8859-1
standalone 指定文档是否独立 yes 或 no
必须写在xml文档的第一行
写法:<?xml version = 1.0?>
元素 xml文档中的标签
文本
属性值必须用引号引起来,单双引号都行
注释
<!-- -->
处理指令:现在基本不用
<?xml-stylesheet type=text/css href=1.css?>
3、XML约束
约束就是xml的书写规则
约束的分类:
导入xsd约束文档
编写根标签
引入实例名称空间 xmlns:xsi=www.w3.org/2001/XMLSchema-instance
引入名称空间 xsi:schemaLocation=www.itcast.cn/xml student.xsd
student.xsd
student.xml
<?xml version=1.0?> <xsd:schema xmlns=www.itheima.cn/xml xmlns:xsd=www.w3.org/2001/XMLSchema targetNamespace=www.itheima.cn/xml elementFormDefault=qualified> <xsd:element name=students type=studentsType/> <xsd:complexType name=studentsType> <xsd:sequence> <xsd:element name=student type=studentType minOccurs=0 maxOccurs=unbounded/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=studentType> <xsd:sequence> <xsd:element name=name type=xsd:string/> <xsd:element name=age type=ageType /> <xsd:element name=sex type=sexType /> </xsd:sequence> <xsd:attribute name=number type=numberType use=required/> </xsd:complexType> <xsd:simpleType name=sexType> <xsd:restriction base=xsd:string> <xsd:enumeration value=male/> <xsd:enumeration value=female/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=ageType> <xsd:restriction base=xsd:integer> <xsd:minInclusive value=0/> <xsd:maxInclusive value=256/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=numberType> <xsd:restriction base=xsd:string> <xsd:pattern value=itheima_\d{4}/> </xsd:restriction> </xsd:simpleType> </xsd:schema> <?xml version=1.0 encoding=UTF-8 ?>
<!--
1、编写根标签
2、引入实例名称空间 xmlns:xsi=www.w3.org/2001/XMLSchema-instance
3、引入名称空间 xsi:schemaLocation=www.itcast.cn/xml student.xsd
-->
<students xmlns=www.itheima.cn/xml xsi:schemaLocation=www.itheima.cn/xml student.xsd xmlns:xsi=www.w3.org/2001/XMLSchema-instance > <student number=itheima_1001> <name>asfd</name> <age>12</age> <sex>male</sex> </student> </students> <students xmlns:itheima=www.itheima.cn/xml xsi:schemaLocation=www.itheima.cn/xml student.xsd xmlns:xsi=www.w3.org/2001/XMLSchema-instance > <itheima:student number=itheima_1001> <itheima:name>asfd</itheima:name> <itheima:age>12</itheima:age> <theima:sex>male</itheima:sex> </itheima:student> </itheima:students>
内部dtd 在xml内部定义dtd
外部dtd 在外部文件中定义dtd
Student.dtd
student.xml
<!ELEMENT students (student*) > <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #required> 唯一的,必须的 <?xml version=1.0 encoding=UTF-8 ?> <!DOCTYPE students SYstem student.dtd> <students> <student number=s0001 > <name>zs</name> <age>abc</age> <sex>yao</sex> </student> </students>
dtd 约束不严谨
schema
4、XML解析
解析XML可以做:
XML解析思想:
优点:不占内存,速度快
缺点:只能读取,不能回写
优点:因为在内存中会形成dom树,可以对dom树进行增删改查
缺点:dom树非常占内存,解析速度慢
Document Element Text Attribute Comment
DOM:将文档加载到内存,形成一棵dom树(document对象),将文档的各个组成部分封装为一些对象
SAX:逐行读取,基于事件驱动
xml常用的解析器
定义了一种规则
使用方法
使用步骤
XPath:
public classtestXPath2 { @Test publicvoidtest()throwsException{ SAXReaderread= new SAXReader(); Documentdocument= read.read(src/Dom4jTest.xml); Listnodes= document.selectNodes(/bookstore//book/title); for(inti= 0;i< nodes.size();i++) { Nodenode= (Node)nodes.get(i); System.out.println(node.getText()); } } }
selectSingleNode()
selectNodes()
注意:要导包 jaxen...jar
创建解析器 SAXReader reader = new SAXReader()
解析xml 获得document对象 Document document = reader.read(url)
// nodename 选取此节点。
// / 从根节点选取。
// // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
// .. 选取当前节点的父节点。
// @ 选取属性。
// [标签名] 子元素过滤
@Test
//遍历所有元素节点
publicvoidtest2()throwsException{ //创建一个xml解析对象 SAXReaderreader= new SAXReader(); //把xml文档加载到document对象中 Documentdocument= reader.read(src/Book.xml); Elementroot= document.getRootElement(); treeWalk(root); } privatevoidtreeWalk(Elementele){ //输出当前节点的名字 System.out.println(ele.getName()); //ele.nodeCount()得到当前节点的所有子节点的数量 for(inti= 0;i<ele.nodeCount();i++){ //取出下标为i的节点 Nodenode= ele.node(i); //判断当前节点是否为标签 if(nodeinstanceofElement){ //把node强转为标签(Element) treeWalk((Element)node); } } } }
public classtestDom4j { @Test publicvoidtest1()throwsException{ //创建一个xml解析对象 SAXReaderreader= new SAXReader(); //把xml文档加载到document对象中 Documentdocument= reader.read(src/Book.xml); Elementroot= document.getRootElement(); // Element bookNode = root.element(书); // System.out.println(bookNode.getName()); //得到当前节点所有的子节点 Listlist= root.elements(); //得到第二本书对象 ElementsecondBook= (Element)list.get(1); //得到当前节点的文本内容 Stringname= secondBook.element(书名).getText(); System.out.println(name); }
导入jar包 dom4j.jar
创建解析器
解析xml 获得document对象
SAXReader reader = new SAXReader()
Document document = reader.read(url)
JAXP sun公司提供的解析 支持dom和sax
JDOM
DOM4J dom for java民间方式,但是是事实方式,非常好,支持dom
解析xml
XPATH 专门用于查询