| |
在JDK 6.0中基于StAX分析XML数据 |
|
时间: 2006-06-13 来自:天极开发 |
 |
|
四、
使用XMLStreamWriter进行写操作
首先,你要创建将待分析的XML文档。由StAX的XMLStreamWriter生成XML。然而,XMLStreamWriter的一个限制是,它不一定会生成良构的文档-而且生成的文档也不一定是有效的。你需要确保生成的XML文档是良构的。列表1是一个由XMLStreamWriter生成的原始XML文档的示例。
在此,你试图使用XMLStreamWriter
API生成列表1中的catalog.xml。在本节中的代码片断节选自XMLWriter.java应用程序,显示于列表2中。首先,你将导入StAX包类,请参考下列编码:
import javax.xml.stream.*; import
javax.xml.stream.events.*; import
javax.xml.stream.XMLOutputFactory; | 你要从一个XMLOutputFactory中得到你的XMLStreamWriter。因此,首先你必须创建一个新的XMLOutputFactory:
| XMLOutputFactory
outputFactory=XMLOutputFactory.newInstance(); | 接下来,创建一个FileWriter以输出XML文档-它将被生成到一个XML文件中:
| FileWriter output=new FileWriter(new
File("C:/STAX/catalog.xml")); | 接下来,创建一个XMLStreamWriter:
| XMLStreamWriter
XMLStreamWriterr=outputFactory.createXMLStreamWriter(output); | 现在,使用writeStartDocument()方法创建一个文档开头。添加要在XML声明中指定的编码和版本(记住,指定的编码并不是生成的XML文档的编码)。如果你需要指定XML文档的编码,该怎么办呢?当从一个XMLOutputFactory对象创建一个XMLStreamWriter对象时,你会这样做:
| XMLStreamWriter.writeStartDocument("UTF-8","1.0"); | 使用writeComment()方法以输出一个注释:
| XMLStreamWriter.writeComment("A OReilly Journal
Catalog"); | 使用writeProcessingInstruction()方法以输出一条处理指令:
| XMLStreamWriter.writeProcessingInstruction("catalog","journal='OReilly'"); | 使用writeStartElement()方法以输出'catalog'元素的开始(元素前缀和命名空间URI也可以在这个方法中指定的):
| XMLStreamWriter.writeStartElement("journal","catalog","http://OnJava.com/Journal"); | 使用writeNamespace()方法以添加'journal'命名空间声明(命名空间前缀和命名空间URI也是在这个方法中指定的):
| XMLStreamWriter.writeNamespace("journal","http://OnJava.com/Journal"); | 再次使用writeNamespace()方法添加xsi命名空间:
| XMLStreamWriter.writeNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance"); | 使用writeAttribute()方法添加xsi:namespaceSchemaLocation属性:
| XMLStreamWriter.writeAttribute("xsi:noNamespaceSchemaLocation","file://c:/Schemas/catalog.xsd"); | 使用writeAttribute()方法添加'publisher'属性:
| XMLStreamWriter.writeAttribute("publisher","OReilly"); | 输出'journal'元素的开始。当增加一个新元素时,前一个元素的'>'括号也被添加上:
XMLStreamWriter.writeStartElement("journal","journal","http: //OnJava.com/Journal"); | 使用writeAttribute()方法以添加'date'和'title'属性。然后,使用writeElement()方法以添加'article'和'title'元素。然后,使用writeCharacters()方法输出'title'元素的文本:
| XMLStreamWriter.writeCharacters("Data Binding with
XMLBeans"); | 任何包含文本或子元素的元素都要有一个结束标签。使用writeEndElement()元素来添加'title'元素的结束标签:
| XMLStreamWriter.writeEndElement(); | 添加'author'元素和'journal'元素的结束标签。在writeEndElement()方法中,不必要指定元素前缀和命名空间URI。以类似方式添加另一个'journal'元素。然后,添加'catalog'元素的结束标签。最后,输出缓冲的数据:
最后一步,关闭XMLStreamWriter。
这就是生成catalog.xml的过程。
源码中的列表2展示了完整的Java应用程序-XMLWriter.java。这个应用程序可以作为一个命令行应用程序运行或在一种例如Eclipse这样的IDE中运行。
|
|
|
|
|
|
|
|