简介:
xml:eXtensible Markup Language可扩展型的标记语言。主要用途是是存储数据。存储数据的功能随着数据库被替代了。但是配置文件一会用xml格式的文件。
简单用法介绍
- 第一行写出xml的版本号、编码文字方式。采用指令。
复制代码
- 注释:与html格式相同
- 文件只能有一个根目录
- 对空格与换行,是计算成数据的,html是不计算的。
- cdata数据区,表明是的数据,不用进行指令翻译
- 定义实体:在正文中用&aa代表“aaa”
复制代码
- 特殊字符翻译: &:& <:<; >:> ":" ':'
约束文件
xml约束文件的意义是对标签进行约束;约束文件有两种:1、dtd文件;2、schema文件
dtd文件
内容格式
- 写每一个标签。
- 对于简单标签 name (#PCDATA);对于复杂标签 elementname (childelementname1,childelement2.....)
复制代码
引入格式
- 引入文件名:
复制代码
- 引入内容
复制代码
3、引入网络上的dtd文件
复制代码
元素约束
格式<!ELEMENT elementname 约束> 约束对于简单元素:
- <#PCDATA>为字符串
- EMPTY 为空
- ANY 空或者字符串 约束复杂元素:
- (element,elemet2,elemet3)子元素的类型与顺序
- 个数: +大于一个词 ?少于1次 *不限
- ,表示元素的顺序,|表格只能一个
属性约束
格式:<!ATTLIST elementname 属性名称 属性类型 属性约束>
- 属性类型
- CDATA:字符串
- (a|b|c):枚举
- ID 属性值以字母或者下划线开头
- 属性约束
- REQUEST 必须要有的属性
复制代码
- IMPLIED 可选
- FIXED 表示固定值
- 直接个值,默认值
xml的解析:
dom解析
像一般的html进行dom解析:将根节点解析为:root,子节点、属性节点、文本。优点:简单,方便实现查找、删减、增加节点。缺点:空间大
sax解析
事件驱动,边读边写。一行行的读。有点:空间少,便于查找;缺点,不能进行删减
解析器
- sun公司的jaxp
- dom4j组织的dom4j(是下面的公司分配出来的,功能更强大)
- jdom组织的jdom
sun公司的解析api。doc模式
- 创建解析工厂,采用默认的设置,默认的解析器。
- 获取解析器的对象,并调用parse函数生成document对象(1.document对象是在org.w3c.dom.Document的实例;2、parse的函数的uri需要加上当前文件夹名字“src/person.xml”,所有的文件都在src文件夹下)
- 获取documnet对象后,可以依据相关函数调用相关内容。
//访问xml。 DocumentBuilderFactory factory1=DocumentBuilderFactory.newInstance(); DocumentBuilder builder1=factory1.newDocumentBuilder(); Document document1=builder1.parse("src/person.xml"); NodeList listName =document1.getElementsByTagName("name");// System.out.println(listName.item(2)); for(int i=0;i< listName.getLength();i++){ Node node1=listName.item(i); System.out.println(node1.getTextContent()); }复制代码
存储xml,用到transformerfactory,注意回写的时候是没有格式的
TransformerFactory factoryTransformer=TransformerFactory.newInstance(); Transformer transformer1=factoryTransformer.newTransformer(); DOMSource domSource1=new DOMSource(document1); transformer1.transform(domSource1, new StreamResult("src/person.xml"));复制代码
sax解析
:一行一行的解析,解析到初始标签、文字、结束标签的时候,调用相关函数。相关函数在handle的子类中。这个一般用不到。就不做解释了。
dom4j解释器
dom4j不是javase的一部分,需要导入dom4j的包dom4j(导入包的方法有两种:1:模块依赖,工程依赖;2、jar包右键as library)。 注意:document类是dom4j的不是w3c的。与sun的生成document不一样。写入的时候OutputFormat类是输出格式的写法。主要是是否进行缩进。
读取person下面,name标签的值。 SAXReader reader1=new SAXReader(); Document document1=reader1.read("src/person.xml"); Element root=document1.getRootElement(); Listlists1=(List )root.elements("name"); for(Element element1:lists1){ System.out.println(element1.getText()); }复制代码
增加一个标签add,并且写入。注意相对地址是相对与project SAXReader reader1=new SAXReader(); Document document1=reader1.read("dom4j1/src/person.xml"); Element root=document1.getRootElement(); Element element1=root.addElement("addr"); element1.setText("henan"); OutputFormat format1=OutputFormat.createPrettyPrint(); XMLWriter writer=new XMLWriter(new FileOutputStream("dom4j1/src/person.xml"), format1); writer.write(document1); writer.close();复制代码