使用Java操作XML的实例

来源:互联网 发布:域名查询备案 编辑:程序博客网 时间:2024/05/22 09:37

 

1:DOM实例

示例XML文件message.xml:

<?xml version="1.0" encoding="UTF-8"?>

       <messages>

              <message>电影:七剑主演:甄子丹</message>

              <message>电影:神话主演:成龙</message>

              <message>电影:世界大战主演:汤姆克鲁斯</message>

              <message>电影:喜马拉雅星主演:吴镇宇</message>

       </messages>

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java"%>

<%@ page import="javax.xml.parsers.*,org.w3c.dom.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  <title>Dom读取XML文件</title>

  </head>

 

  <body>

    <%DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

    DocumentBuilder db=dbf.newDocumentBuilder();

    Document doc=db.parse("f:/message.xml");

    NodeList nl=doc.getElementsByTagName("message");

    for(int j=0;j<nl.getLength();j++)

    {

        String str=nl.item(j).getFirstChild().getNodue();

     %>

     <%=str %><br>

     <%} %>

  </body>

</html>

在浏览器中成功输出:

电影:七剑 主演:甄子丹
电影:神话 主演:成龙
电影:世界大战 主演:汤姆克鲁斯
电影:喜马拉雅星 主演:吴镇宇

 

2:SAX实例

示例XML文件:file.xml

<?xml version="1.0" encoding="gb2312"?>

       <common city="jinan" date="11/06/2009">

              <file name="英雄" price="120" station="影院1" time="19:00"

                     description="大片">

              </file>

              <file name="无间道" price="100" station="影院2" time="18:30"

                     description="香港">

              </file>

              <file name="阿甘正传" price="200" station="影院3" time="20:00"

                     description="好莱坞大片">

              </file>

       </common>

.java源文件:

package xml;

import org.w3c.dom.*;

import javax.xml.parsers.*;

import org.xml.sax.*;

import org.xml.sax.helpers.DefaultHandler;

public class XMLReader extends DefaultHandler{

    private int index;

    private Locator locator;

    public XMLReader()

    {

       super();

    }

    public static void main(String[]args)

    {

       try

       {

           SAXParserFactory sf=SAXParserFactory.newInstance();//产生新的SAX流的工厂实例

           SAXParser sp=sf.newSAXParser();//用工厂生产出SAX流的实例

           XMLReader reader=new XMLReader();

           sp.parse(new InputSource("f:/file.xml"), reader);//把目标文件转化为输入流

       }

       catch (Exception e) {

           e.printStackTrace();

       }

    }

    //处理文档解析开始事件

    public void startDocument()

    {

       System.out.println("/n***********************(--电影放映安排--)*******************/n");

    }

    //处理元素开始事件

    public void startElement(String uri,String localName,String qName,Attributes attrs)

    {

       if(qName.equalsIgnoreCase("file"))

       {

           index++;

           int attrCount=attrs.getLength();

           for(int i=0;i<attrCount;i++)

           {

              String attrName=attrs.getQName(i);

              if(attrName.equalsIgnoreCase("name"))

              {

                  System.out.println("/t第"+index+"场,片名<<"+attrs.getValue(i)+">>");  

              }

              if(attrName.equalsIgnoreCase("price"))

              {

                  System.out.println("/t票价:"+attrs.getValue(i));

              }

              if(attrName.equalsIgnoreCase("station"))

              {

                  System.out.println("/t放映地点:"+attrs.getValue(i));

              }

              if(attrName.equalsIgnoreCase("time"))

              {

                  System.out.println("/t放映时间"+attrs.getValue(i));

              }

              if(attrName.equalsIgnoreCase("description"))

              {

                  System.out.println("/t影片简介"+attrs.getValue(i));

              }

              System.out.println();

           }

       }

    }

    //处理文档解析结束事件

    public void endDocument() throws SAXException {

       System.out.println("/t/t/t/t/t/t/t-----共有"+index+"场电影");

    }

    //处理元素结束事件

    public void endElement(String uri, String localName, String name){

          

    }

    //打印致命错误信息

    public void fatalError(SAXParseException e) throws SAXException {

       super.fatalError(e);

    }

    //打印普通错误

    public void error(SAXParseException e) throws SAXException {

       super.error(e);

    }

    //打印警告信息

    public void warning(SAXParseException e) throws SAXException {

       super.warning(e);

    }

}

成功调试,输出结果:

***********************(--电影放映安排--)************************

 

    第1场,片名<<英雄>>

 

    票价:120

 

    放映地点:影院1

 

    放映时间19:00

 

    影片简介大片

 

    第2场,片名<<无间道>>

 

    票价:100

 

    放映地点:影院2

 

    放映时间18:30

 

    影片简介香港

 

    第3场,片名<<阿甘正传>>

 

    票价:200

 

    放映地点:影院3

 

    放映时间20:00

 

    影片简介好莱坞大片

 

                         -----共有3场电影

 

3:JDOM实例

XML示例文件:city.xml

<?xml version="1.0" encoding="UTF-8"?>

<books>

              <book email="guangxu1@yahoo.com.cn">

                     <name>jinan</name>

              </book>

              <book email="guangxu2@yahoo.com.cn">

                     <name>jinan</name>

              </book>

              <book email="guangxu3@yahoo.com.cn">

                     <name>jinan</name>

              </book>

       </books>

.java源文件:

package xml;

import java.io.*;

import java.util.*;

import org.jdom.*;

import org.jdom.input.SAXBuilder;

import org.jdom.output.XMLOutputter;

public class JDomXml {

    public JDomXml()

    {

       String xmlpath="f:/city.xml";

       SAXBuilder builder=new SAXBuilder();

       try

       {

           Document doc=builder.build(xmlpath);

           Element books=doc.getRootElement();

           List booklist=books.getChildren("book");

           for(Iterator iter=booklist.iterator();iter.hasNext();)

           {

              Element book=(Element)iter.next();

              String email=book.getAttributue("email");

              String name=book.getChildTextTrim("name");

              System.out.println(email);

              System.out.println(name);

              book.getChild("name").setText("shandong");

           }

           XMLOutputter outputter=new XMLOutputter();

           outputter.output(doc, new FileOutputStream(xmlpath));

       }

       catch (Exception e) {

           e.printStackTrace();

       }

    }

    public static void main(String[] args)

    {

       new JDomXml();

    }

}

调试成功,输出结果:guangxu1@yahoo.com.cn

jinan

guangxu2@yahoo.com.cn

jinan

guangxu3@yahoo.com.cn

jinan

并把文件中的jinan全部改成了shandong

4:Dom4j实例

XML示例文件:book.xml

<?xml version="1.0" encoding="UTF-8"?>

  <books>

         <book show="yes">

         </book>

         <book show="yes">

                <title>jsp</title>

         </book>

         <book show="no">

                <title>java</title>

         </book>

     <owner>guangxu</owner>

</books>

.java源文件

import java.io.File;

import java.io.FileWriter;

import java.util.*;

import org.dom4j.*;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

public class Dom4j {

    public boolean Dom4j() {

       try{

           SAXReader saxReader = new SAXReader();

           Document document = saxReader.read(new File("f:/book.xml"));

           List list = document.selectNodes("/books/book/@show" ); //用xpath查找对象

           Iterator iter = list.iterator();

           while(iter.hasNext())

              {

              Attribute attribute = (Attribute)iter.next();

              if(attribute.getValue().equals("yes"))

                  {

                  attribute.setValue("no");

                  }

              }//如果book节点中show属性的内容为yes,则修改成no

          

           list = document.selectNodes("/books/owner" );

           iter = list.iterator();

           if(iter.hasNext())

           {

              Element ownerElement = (Element)iter.next();

              ownerElement.setText("Tshinghua");//把owner项内容改为guangxu123

              Element dateElement = ownerElement.addElement("date");

              dateElement.setText("2004-09-11");

              dateElement.addAttribute("type","computer");

           }

           list = document.selectNodes("/books/book");

           iter = list.iterator();

           while(iter.hasNext())

           {

              Element bookElement = (Element)iter.next();

              Iterator iterator = bookElement.elementIterator("title");

              while(iterator.hasNext())

              {

                  Element titleElement=(Element)iterator.next();

                  if(titleElement.getText().equals("jsp"))//若title内容为jsp,则删除该节点

                  {

                     bookElement.remove(titleElement);

                  }

              }

           }

          

           XMLWriter writer = new XMLWriter(new FileWriter(new File("f:/book.xml")));

           writer.write(document);

           writer.close();

           }

       catch(Exception ex){

           ex.printStackTrace();

           }

           return true;

    }

    public static void main(String[]args)

    {

       new Dom4j();

    }

 

}

 

原创粉丝点击