[size=18:b26ed2dff1][b:b26ed2dff1]XML概念和应用[/b:b26ed2dff1][/size:b26ed2dff1]
随着JAVA和XML的不断发展,二者事实上已经发展成为可移植的语言和可移植的数据实现者。所有关于XML一个最重要的概念是:[color=red:b26ed2dff1]标准的异质平台之间传输消息语言[/color:b26ed2dff1]。它产生的消息(或者文档)可以通用于各种不同的平台、终端。当然,当系统接收一个XML文档后,可以又把它转换为需要的最终文档,最终文档可以是HTML、JSP或者其它形式的XML变化模式。
从下图中可以领会一些关于XML的概念。
[img:b26ed2dff1]http://www.chinaunix.net/forum/uploadfile/ss.gif[/img:b26ed2dff1]
上图中,各终端之间均以XML为传输数据的标准,随着XML这几年的发展,它已经成为各种终端之间通信的标准。
当然,XML所包含的东西绝不仅仅只有这些,下面我将在读者已经理解了XML的基本概念基础之上,深入地讨论一下以下三个关于XML的核心问题:
一、 如何产生一个XML?
二、 如何分析一个XML?为什么要分析?
三、 如何将XML转换成其它元语言?
[b:b26ed2dff1] [size=18:b26ed2dff1]如何生成XML?[/size:b26ed2dff1][/b:b26ed2dff1]
[b:b26ed2dff1]2.1.1 XML简单示例:[/b:b26ed2dff1]
一、直接书写XML文件
示例1:e:/test.xml
<?xml version="1.0" encoding="GB2312" ?>
<book>
<title>理解XML</title>
<auother>陌生人</auother>
<sale >59.00</sale>
</book>
将该文件以.XML格式存放。
二、我们将示例一稍稍改进一些,得用JSP在生成XML文件。
示例2:/testxml.jsp
<%@ page contentType="text/xml;charset=gb2312" %>
<?xml version="1.0" encoding="GB2312" ?>
<book>
<title>理解XML</title>
<auother>陌生人</auother>
<sale >59.00</sale>
</book>
下图给出了示例2的jsp文件生成的XML:
[img:b26ed2dff1]http://www.chinaunix.net/forum/uploadfile/testxml.gif[/img:b26ed2dff1]
导读: 1、<%@ page contentType="text/xml;charset=gb2312" %>该语句指定了JSP页面显示为XML文件。当然我们习惯利用contentType="text/html;charset=gb2312"指定显示页面为HTML.这是二者之间的差别。
2、读者可以用IE直接打开示例1的XML文件,得到的结果和图2.1类似。
三、使用bean生成XML
好象我们又要更进一步了,使用BEAN来实现生成动态内容的JSP文件,当然作为本章的要点JSP文件的主要任务还是生成XML文件。它是对上一种方法进一步的拓展。
示例1:/WEB-INF/classes/bean/Item.java
package bean;
public class Item implements java.io.Serializable
{
private String title=null,auother=null;
private float price;
public Item(String title,String auother,float price)
{
this.title=title;
this.auother=auother;
this.price=price;
}
public String gettitle()
{
return title;
}
public float getprice()
{
return price;
}
public String getauother()
{
return auother;
}
}
示例2WEB-INF/classes/bean/ItemOption.java
package bean;
import java.util.Iterator;
import java.util.Vector;
public class ItemOption implements java.io.Serializable
{
private Vector items=new Vector();
public ItemOption()
{
}
public Iterator getItems()
{
return items.iterator();
}
//增加cector中的对象
public void addItem(String title,String auother,float price)
{
Object elements=new Item(title,auother,price);
items.addElement(elements);
}
//移除vector中的对象
public void delItem()
{
items.removeAllElements();
}
}
导读:这两个bean的目的是提供为Vector容器增加对象、删除对象、访问容器对象的方法。值得注意的是利用迭代器Iterator机制来访问Vector的,利用迭代的好处在于:
1、 不必把容器的第一个无素(对象)当作一个特例来处理。
2、 使用迭代的方法,使得jsp页面内容更清晰明了。
当然这里使用的迭代器只是代向的,只能一个一个地检索对象。双向迭代器的用法请参考其它书籍的“列表迭代器”的用法。
示例3/itemoption.jsp
<%@ page contentType="text/xml;charset=gb2312" %>
<%@ page import="bean.*"%>
<jsp:useBean id="ItemOption" scope="session" class="bean.ItemOption"/>
<?xml version="1.0" encoding="GB2312" ?>
<book>
<%
ItemOption.addItem("XML渐行渐进(一)","wwlongyong",(float)20.00);
ItemOption.addItem("XML渐行渐进(二)","wwlongyong",(float)21.00);
ItemOption.addItem("XML渐行渐进(三)","wwlongyong",(float)23.00);
java.util.Iterator Itvar=ItemOption.getItems() ;
Item item=null;
%>
<%while(Itvar.hasNext())
{
item=(Item)Itvar.next();
%>
<title><%=item.gettitle()%></title>
<auother> <%=item.getauother()%> </auother>
<sale><%=item.getprice()%></sale>
<%
}
ItemOption.delItem();
%>
</book>
导读:从这个JSP文件看出,利用bean的作用可以动态生成jsp的文件内容,其核心其实只对xml文件的显示内容做了一个动态循环。就这么简单!下图给出了以上操作的结果:
(由于上传图片数量的限制,这里无法给出图示结果。其效果可以参照上图)
最后读者可以自行考虑一下在bean 中增加一个printXml的方法,让bean生成自身的xml.从代码的可重用性上来讲,这种方法更为可取。