﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font face=华文隶书 color=salmon pink size=6&gt;&lt;b&gt;工作小驿&lt;/b&gt;-随笔分类-XML</title><link>http://www.blogjava.net/wjun530/category/23858.html</link><description>&lt;a href="http://www.fodey.com/generators/animated/ninjatext.asp"&gt;&lt;img src="http://r3.fodey.com/14c8ffb1600cc41aaaa8e03a1cf049678.1.gif" border=0 width="437" height="146" alt="Ninja!"&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 14 Aug 2007 11:59:55 GMT</lastBuildDate><pubDate>Tue, 14 Aug 2007 11:59:55 GMT</pubDate><ttl>60</ttl><item><title>新手入门：Java XML编程实例解析</title><link>http://www.blogjava.net/wjun530/archive/2007/08/14/136636.html</link><dc:creator>王君</dc:creator><author>王君</author><pubDate>Tue, 14 Aug 2007 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/wjun530/archive/2007/08/14/136636.html</guid><wfw:comment>http://www.blogjava.net/wjun530/comments/136636.html</wfw:comment><comments>http://www.blogjava.net/wjun530/archive/2007/08/14/136636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wjun530/comments/commentRss/136636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wjun530/services/trackbacks/136636.html</trackback:ping><description><![CDATA[XML作为全球通用的结构化语言，越来越受人们青睐，各种开发平台（比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等）也都把支持XML开发作为宣传口号之一。在许多项目中利用XML数据交换信息，省去了许多麻烦事，不用制定繁锁的数据格式，利用XML数据易于表达，也利于一线开发者跟踪调试。 <br><br>在XML应用中，最常用也最实用的莫过于XML文件的读写，所以笔者通过一个简单的XML文件读写来作简要分析。可以在任何文本编辑器中先建立如下结构的XML文件，类似于HTML结构，但XML语义比较严格，起始标记必须配对，比如"〈学生花名册〉"与"〈／学生花名册〉"对应，空格多少可不必在意，但一般都以缩格形式书写，便于阅读。把此文件命名为Input.xml，可以在任何支持XML的浏览器中打开测试一下，如果输入正确，在浏览中可以看到此文件的树形表示结构。如果您还对XML结构感到比较陌生，建议先看看《简析Delphi中的XML编程》一文中关于XML文件的说明。 <br><br><br><?xml version="1.0" encoding="GB2312"?><br>　　&lt;学生花名册&gt;<br>　　&lt;学生 性别 = "男"&gt;<br>　　&lt;姓名&gt;李华</姓名><br>　　&lt;年龄&gt;14</年龄><br>　　&lt;电话&gt;6287555</电话><br>　　</学生><br>　　&lt;学生 性别 = "男"&gt;<br>　　&lt;姓名&gt;张三</姓名><br>　　&lt;年龄&gt;16</年龄><br>　　&lt;电话&gt;8273425</电话><br>　　</学生><br>　　</学生花名册><br><br><br>　　 <br>准备工作做完后，接着就开始写实质性的JAVA代码了。为保存从XML文件读入的信息，需要先建一个简单的Bean来保存学生信息，命名为StudentBean，代码如下所示： <br><br><br>　public class StudentBean {<br>　　private String sex; //学生性别<br>　　private String name; //学生姓名<br>　　private int age; //学生年龄<br>　　private String phone; //电话号码<br>　　<br>　　public void setSex(String s) {<br>　　sex = s;<br>　　}<br>　　public void setName(String s) {<br>　　name = s;<br>　　}<br>　　public void setAge(int a) {<br>　　age = a;<br>　　}<br>　　public void setPhone(String s) {<br>　　phone = s;<br>　　}<br>　　public String getSex() {<br>　　return sex;<br>　　}<br>　　public String getName() {<br>　　return name;<br>　　}<br>　　public int getAge() {<br>　　return age;<br>　　}<br>　　public String getPhone() {<br>　　return phone;<br>　　}<br>　　}<br><br><br>　　 <br>之后写XML的测试类，笔者把这个类命名为XMLTest，为了读写XML文件，需要导入如下JAVA包，"//"后为注释说明，笔者的环境是JDK 1.3.1_04，在JDK 1.4.0中测试也通过，XML解释器用Apache的Crimson，可以到Apache主页去上载。 <br><br><br>　import java.io.*;<br>　　//Java基础包，包含各种IO操作<br>　　import java.util.*;<br>　　//Java基础包，包含各种标准数据结构操作<br>　　import javax.xml.parsers.*;<br>　　//XML解析器接口<br>　　import org.w3c.dom.*;<br>　　//XML的DOM实现<br>　　import org.apache.crimson.tree.XmlDocument;<br>　　//写XML文件要用到<br><br><br>　 <br>为了保存多个学生信息，还得借助一个集合类(并不是单纯意义上的集合，JAVA中的集合是集合框架的概念，包含向量、列表、哈希表等），这里采用Vector向量类。定义在XMLTest测试类中，命名为student_Vector。然后定义两个方法readXMLFile和writeXMLFile，实现读写操作。代码如下： <br><br><br>　private void readXMLFile(String inFile) throws Exception {<br>　　//为解析XML作准备<br>　　//创建DocumentBuilderFactory实例,指定DocumentBuilder<br>　　DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();<br>　　DocumentBuilder db = null;<br>　　try {<br>　　db = dbf.newDocumentBuilder();<br>　　} catch (ParserConfigurationException pce) {<br>　　System.err.println(pce);<br>　　//出异常时输出异常信息，然后退出，下同<br>　　System.exit(1);<br>　　}<br>　　Document doc = null;<br>　　try {<br>　　doc = db.parse(inFile);<br>　　} catch (DOMException dom) {<br>　　System.err.println(dom.getMessage());<br>　　System.exit(1);<br>　　} catch (IOException ioe) {<br>　　System.err.println(ioe);<br>　　System.exit(1);<br>　　}<br>　　//下面是解析XML的全过程，<br>//比较简单，先取根元素"学生花名册"<br>　　Element root = doc.getDocumentElement();<br>　　//取"学生"元素列表<br>　　NodeList students = root.getElementsByTagName("学生");<br>　　for (int i = 0; i &lt; students.getLength(); i++) {<br>　　//依次取每个"学生"元素<br>　　Element student = (Element) students.item(i);<br>　　//创建一个学生的Bean实例<br>　　StudentBean studentBean = new StudentBean();<br>　　//取学生的性别属性<br>　　studentBean.setSex(student.getAttribute("性别"));<br>　　//取"姓名"元素，下面类同<br>　　NodeList names = student.getElementsByTagName("姓名");<br>　　if (names.getLength() == 1) {<br>　　Element e = (Element) names.item(0);<br>　　Text t = (Text) e.getFirstChild();<br>　　studentBean.setName(t.getNodeValue());<br>　　}<br>　　<br>　　NodeList ages = student.getElementsByTagName("年龄");<br>　　if (ages.getLength() == 1) {<br>　　Element e = (Element) ages.item(0);<br>　　Text t = (Text) e.getFirstChild();<br>　　studentBean.setAge(Integer.parseInt(t.getNodeValue()));<br>　　}<br>　　<br>　　NodeList phones = student.getElementsByTagName("电话");<br>　　if (phones.getLength() == 1) {<br>　　Element e = (Element) phones.item(0);<br>　　Text t = (Text) e.getFirstChild();<br>　　studentBean.setPhone(t.getNodeValue());<br>　　}<br>　　<br>　　student_Vector.add(studentBean);<br>　　}<br>　　}<br>　　<br>　　private void writeXMLFile(String outFile) throws Exception {<br>　　//为解析XML作准备，<br>　　//创建DocumentBuilderFactory实例,指定DocumentBuilder<br>　　DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();<br>　　DocumentBuilder db = null;<br>　　try {<br>　　db = dbf.newDocumentBuilder();<br>　　} catch (ParserConfigurationException pce) {<br>　　System.err.println(pce);<br>　　System.exit(1);<br>　　}<br>　　<br>　　Document doc = null;<br>　　doc = db.newDocument();<br>　　<br>　　//下面是建立XML文档内容的过程，<br>　　/先建立根元素"学生花名册"<br>　　Element root = doc.createElement("学生花名册");<br>　　//根元素添加上文档<br>　　doc.appendChild(root);<br>　　<br>　　//取学生信息的Bean列表<br>　　for (int i = 0; i &lt; student_Vector.size(); i++) {<br>　　//依次取每个学生的信息<br>　　StudentBean studentBean = (StudentBean) student_Vector.get(i);<br>　　//建立"学生"元素，添加到根元素<br>　　Element student = doc.createElement("学生");<br>　　student.setAttribute("性别", studentBean.getSex());<br>　　root.appendChild(student);<br>　　//建立"姓名"元素，添加到学生下面，下同<br>　　Element name = doc.createElement("姓名");<br>　　student.appendChild(name);<br>　　Text tName = doc.createTextNode(studentBean.getName());<br>　　name.appendChild(tName);<br>　　<br>　　Element age = doc.createElement("年龄");<br>　　student.appendChild(age);<br>　　Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));<br>　　age.appendChild(tAge);<br>　　<br>　　Element phone = doc.createElement("电话");<br>　　student.appendChild(phone);<br>　　Text tPhone = doc.createTextNode(studentBean.getPhone());<br>　　phone.appendChild(tPhone);<br>　　}<br>　　//把XML文档输出到指定的文件<br>　　FileOutputStream outStream = new FileOutputStream(outFile);<br>　　OutputStreamWriter outWriter = new OutputStreamWriter(outStream);<br>　　((XmlDocument) doc).write(outWriter, "GB2312");<br>　　outWriter.close();<br>　　outStream.close();<br>　　}<br><br><br>　　 <br>最后加入测试主函数，如下： <br><br><br>　public static void main(String[] args) throws Exception {<br>　　//建立测试实例<br>　　XMLTest xmlTest = new XMLTest();<br>　　//初始化向量列表<br>　　xmlTest.student_Vector = new Vector();<br>　　<br>　　System.out.println("开始读Input.xml文件");<br>　　xmlTest.readXMLFile("Input.xml");<br>　　<br>　　System.out.println("读入完毕,开始写Output.xml文件");<br>　　xmlTest.writeXMLFile("Output.xml");<br>　　System.out.println("写入完成");<br>　　}<br><br><br>好了，保存好StudentBean和XMLTest，把Input.xml保存到工作目录下。可以看到"写入完成"了。
<img src ="http://www.blogjava.net/wjun530/aggbug/136636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wjun530/" target="_blank">王君</a> 2007-08-14 12:20 <a href="http://www.blogjava.net/wjun530/archive/2007/08/14/136636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>