简介:
xml:eXtensible Markup Language可扩展型的标记语言。主要用途是是存储数据。存储数据的功能随着数据库被替代了。但是配置文件一会用xml格式的文件。
简单用法介绍
- 第一行写出xml的版本号、编码文字方式。采用指令。
<?xml version="1.0" encoding="UTF-8"?>
复制代码- 注释:与html格式相同
- 文件只能有一个根目录
- 对空格与换行,是计算成数据的,html是不计算的。
- cdata数据区,表明是的数据,不用进行指令翻译
- 定义实体:在正文中用&aa代表“aaa”
<![CDATA[AFAF<LJL]]>
复制代码- 特殊字符翻译: &:& <:<; >:> ":" ':'
约束文件
xml约束文件的意义是对标签进行约束;约束文件有两种:1、dtd文件;2、schema文件
dtd文件
内容格式
- 写每一个标签。
- 对于简单标签 name (#PCDATA);对于复杂标签 elementname (childelementname1,childelement2.....)
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
复制代码引入格式
- 引入文件名:
<!DOCTYPE ROOTELEMENT SYSTEM "filename">
复制代码- 引入内容
<!DOCTYPE ROOTELEMENT [
neirong
]>
复制代码3、引入网络上的dtd文件
<!DOCTYPE ROOTELEMENT PUBLIC "filename" "URL">
复制代码元素约束
格式<!ELEMENT elementname 约束> 约束对于简单元素:
- <#PCDATA>为字符串
- EMPTY 为空
- ANY 空或者字符串
约束复杂元素: - (element,elemet2,elemet3)子元素的类型与顺序
- 个数: +大于一个词 ?少于1次 *不限
- ,表示元素的顺序,|表格只能一个
属性约束
格式:<!ATTLIST elementname 属性名称 属性类型 属性约束>
- 属性类型
- CDATA:字符串
- (a|b|c):枚举
- ID 属性值以字母或者下划线开头
- 属性约束
- REQUEST 必须要有的属性
<!ELEMENT person (name+|age,addr)>
<!ELEMENT name ANY>
<!ATTLIST name
abc (a|b|c) #REQUIRED
bca CDATA #REQUIRED>
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
复制代码- 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();
List<Element> lists1=(List<Element>)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();
复制代码
本文介绍了XML(可扩展标记语言),其主要用于存储数据,现配置文件仍常用。阐述了简单用法,如版本号、编码等。介绍了约束文件,包括DTD文件的内容、引入格式及元素、属性约束。还讲解了XML的解析方法,如DOM解析、SAX解析及相关解析器和API。

被折叠的 条评论
为什么被折叠?



