JSP XML 动态创建XML文档
- 格式:doc
- 大小:215.00 KB
- 文档页数:5
JSP XML 动态创建XML文档
DOM解析器通过在内存中建立和XML结构相对应的树状结构数据,使得应用程序可以方便地获得XML文件中的数据。JAXP也提供了使用内存中的树状结构数据建立一个XML文件的API,即使用解析器得到的Document对象建立一个新的XML文件。
1.动态生成XML文档步骤
DOM生成XML文档的基本过程是,解析器的parse方法将整个被解析的XML文件封装成一个Document节点返回,这时可以对Document节点进行修改,然后使用Transformer对象将一个Document节点变换为一个XML文件。具体步骤如下所示:
(1)生成Document节点。解析器不调用parse方法,也可以得到一个Document节点。解析器通过调用newDocument()可得到一个Document节点,例如:
Document document= builder.newDocument();
(2)应用程序修改Document节点。编写程序代码修改Document节点,可以执行添加、删除等节点。其常用方法如表7-8所示:
表7-8 修改Document节点常用方法
名称 说明
appendChild(Node newChild) 向当前节点增加一个新的子节点,并返回这个新节点
removeChild(Node oldChild) 删除参数指定的子节点,并返回被删除的子节点
replaceChild(Node newChild, Node oldChild) 替换子节点,并返回被替换的子节点
removeAttributeNode(Attr oldAttr) 删除Element节点的属性
setAttribute(String name, String value) 为Element节点增加新的属性及属性值,如果该属性已经存在,新的属性将替换旧的属性
replaceWholeText(String content) 替换当前Text节点的文本内容
appendData(String arg) 向当前Text节点尾加文本内容
insertData(int offset, String arg) 向当前Text节点插入文本内容,插入的位置由参数offset指定,即第offset个字符的后继位置
deleteData(int offset,int count) 删除当前节点的文本内容中的一部分。被删除的范围由参数offset和count指定,即从第offset个字符后续的count个字符
replaceData(int offset,int count, String arg) 当前Text节点中文本内容的一部分替换为参数arg指定的内容,被替换的范围由参数offset和count指定,即从第offset个字符后续的count个字符
(3)转换XML文件。然后使用Transformer对象将一个Document节点变换为一个XML文件。使用Transformer对象将一个Document节点变换为一个XML文件需要经过如下过程:
使用javax.xml.transform包中的TransformerFactory类建立一个对象:
TransformerFactory transFactory=TransformerFactory. newInstance()
上步骤中得到的transFactory对象调用newTransformer()方法得到一个Transformer对象:
Transformer transformer=transFactory. newTransformer();
Transformer类在javax.xml.transform包中。
将被变换的Document对象封装到一个DOMSource对象中:
DOMSource domSource=new DOMSource(document);
DOMSource类在javax.xml.transform.dom包中。将变换得到XML文件对象封装到一个StreamResult对象中:
File file=new File("newXML.xml");
FileOutputStream out=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(out);
StreamResult类在javax.xml.transform.stream包中。最后,Transformer 对象transformer 调用transform方法实施变换:
transformer.transform(domSource, xmlResult);
2.动态生成XML文档案例
现在创建一个案例,演示使用DOM生成XML文件。打开记事本,输入下列代码:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.w3c.dom.*,javax.xml.parsers.*,java.io.*,
javax.xml.transform.*,javax.xml.transform.stream.*,javax.xml.transform.dom.*"%>
<% try{
String train[]={"XML实践教程","JSP从入门到精通","Java实践教程"};
String
type[]={"978-7-302-15488-4","7-302-12591-0","978-7-302-14337-6"};
String startTime[]={"王峰","刘海松","李章帅"};
//创建XML文档中需要的数据
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.newDocument(); //创建document节点对象
document.setXmlVersion("1.0");//设置使用XML文件的版本
Element root=document.createElement("图书列表"); document.appendChild(root);//设置XML文件的根结点
for(int k=1;k<=train.length;k++){
root.appendChild(document.createElement("图书"));
} //在根节点下添加了三个节点
NodeList nodeList=document.getElementsByTagName("图书");//获得图书的节点集合
int size=nodeList.getLength();
for(int k=0;k Node node=nodeList.item(k); if(node.getNodeType()==Node.ELEMENT_NODE) { Element elementNode=(Element)node; elementNode.setAttribute("ISBN",type[k]);//为车次设置属性其取值从数组type中取。 elementNode.appendChild(document.createElement("名称"));//为图书添加名称标记 elementNode.appendChild(document.createElement("作者"));//为图书添加作者标记 } } nodeList=document.getElementsByTagName("名称");//获得名称节点集合 size=nodeList.getLength(); for(int k=0;k Node node=nodeList.item(k); if(node.getNodeType()==Node.ELEMENT_NODE){ Element elementNode=(Element)node; elementNode.appendChild(document.createTextNode(train[k])); //为标记添加文本数据。 } } nodeList=document.getElementsByTagName("作者"); size=nodeList.getLength(); for(int k=0;k Node node=nodeList.item(k); if(node.getNodeType()==Node.ELEMENT_NODE){ Element elementNode=(Element)node; elementNode.appendChild(document.createTextNode(startTime[k])); } } TransformerFactory transFactory=TransformerFactory.newInstance();//创建一个TransformerFactory(转换工厂对象) Transformer transformer=transFactory.newTransformer();//创建一个Transformer对像(文件转换对象) DOMSource domSource=new DOMSource(document); //把要转换的Document对象封装到一个DOMSource类中 File file=new File("C:\\Tomcat 6.0\\webapps\\JSPExample\\bookt.xml"); FileOutputStream outt=new FileOutputStream(file); StreamResult xmlResult=new StreamResult(outt);//将要变换得到XML文件将来保存在StreamResult transformer.transform(domSource,xmlResult);//把节点树转换为XML文件 }catch(Exception e){System.out.println(e);} %>显示创建的XML文档