XML之读写

    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>

元素必须有结束标签;必须有根 元素(所谓根元素就是不被其他元素包围,并且根元素只能有一个)

实体引用:

   &lt<小于; &gt>大于; &amp &与字符;&apos "单引号"; &quot " 双引号"; 

   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){

            }  }}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值