XML处理指令,简称PI(processing instruction).处理指令用来解析引擎如何解析XML文档内容<?xml version="1.0" encoding="utf-8" ?>在XML中,所有的处理指令都以<?开始?>结束<?后面紧跟的是处理指令的名称,XML处理指令要求指定一个version属性。并允许指定可选的standalone和encoding,其中standalone是指是否允许使用外部声明,可设为yes或no. yes是指定不使用外部申明,no为使用。Encoding是指作者使用的字符集编码格式,有UTF-8、GBK、gb2312等元素属性。
XML文档包含XML元素,XML元素指定的是从开始标签直到结束标签的部分。元素可包含其他元素、文本或者两者的混合物,元素也可以用于属性。
<datasource id="db_oracle">
<property name="url">
jdbc:thin@192.168.0.26:1521:tarena
</property>
<property name="dbUser">openlab </property>
<property name="dbPwd">open123</property>
</datasource>
元素必须有结束标签;必须有根 元素(所谓根元素就是不被其他元素包围,并且根元素只能有一个)
实体引用:
<<小于; >>大于; & &与字符;&apos "单引号"; " " 双引号";
CDATA段 格式<![CDATA[文本内容]]>特殊标签中的实体引用都被忽略,所有内容被当成一整块文本数据对待
<?xml version="1.0" encoding="utf-8"?>
<root> <![CDATA[写文本 <hello> <world>]]> </root>
XML解析方式:
SAX是一种XML解析的替换方式。相比于DOM,SAX是一种速度更快,更有效的方法。它是逐行扫描文档,一边扫描一边解析,而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。
优点:解析可以立即开始
缺点: 不能对节点做修改
Date解析方法
Dom(Document Object Model,即文档对象模型)是W3C组织推荐的处理XML的一种方式。DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个Node对象(节点)
优点:把xml文件在内存中构造树形结构,可以遍历和修改节点。
缺点:如果文件比较大,内存有压力,解析的时间会比较长
SAXReader读取XML文档:使用SAXReader需要导入dom4j-full.jar包
Dom4j是一个java的XML API,类似于jdom,用于读写XML文件的。Dom4j是一个非常优秀的java XML API,具有性能优异、功能强大和易用的特点,同时它也是一个开放源代码的软件。
阿里云jar组件"坐标"搜索: http://maven.aliyun.com/nexus/
使用Dom4j解析文档
解析XML文档的大致步骤:创建SAXReader-->使用SAXReader读取xml文档并生成Document对象(这一步也是Dom解析耗时资源的体现,因为要讲XML文件全部读取完毕并存入到Document对象中)--->通过Document获取根元素-->按照文档的层级结构从根元素开始逐级获取子元素以达到遍历XML文档数据的目的
public class ParseXMLDemo{
public static void main(String[] args){
try{
List<Emp> list=new ArrayList<Emp>();
SAXReader reader=new SAXReader();
Document doc=reader.reader(new File("emplist.xml"));
Element root=doc.getRootElement();
List<Element> emplist=root.elements("emp");
for(Element empEle:emplist){
//获取名字
Element nameEle=empEle.element("name");
String name=nameEle.getText().trim();
//获取年龄
Element ageEle=empEle.element("age");
int age=Integer.parseInt(ageEle.getText());
//获取性别
String gender=empEle.elementText("gender");
//获取工资
int salary=Integer.parseInt(empEle.elementText("salary"));
//获取id
int id=Integer.parseInt(empEle.attributeValue("id"));
Emp emp=new Emp(id,name,age,gender,salary);
list.add(emp);}
System.out.println("解析完毕!")
for(Emp e:list){
System.out.println(e);
}}catch(Exception e){
e.printStackTrace();
}}}
//生成XML文档
public class WriterXMLDemo{
public static void main(String[] args){
List<Emp> list=new ArrayList<Emp>();
list.add(new Emp(1,"张三",22,"男",500));
list.add(new Emp(2,"李四",22,"女",600));
list.add(new Emp(3,"王五",22,"男",700));
生成一个XML文档的大致步骤:创建一个Document对象表示一个空白文档-->向Document对象中添加根元素-->按照预定生成的XML文档的结构依次从根元素开始逐级添加子元素--->创建XmlWriter-->通过XmlWriter将给定的Document对象写出以形成XML文档。
try{
Document doc=DocumentHelper.createDocument();
Element root=doc.addElement("list");
for(Emp emp:list){
Element empEle=root.addElement("emp");
Element nameEle=empEle.addElement("name");
nameEle.addText(emp.getName());
empEle.addElement("get").addText(String.valueOf(emp.getAge()));
empEle.addElement("gender").addText(String.valueOf(emp.getGender()));
empEle.addElement("salary").addText(String.valueOf(emp.getSalary()));
//添加id属性
empEle.addAttribute("id",emp.getId()+"");}
XMLWriter writer=new XMLWriter(new FileOutputStream("myemplist.xml"),OutputFormat.createPrettyPrint());
writer.write(doc);
System.out.println("写出完毕!");
writer.close();
}catch(Exception e){
} }}