[XML]XML的保存

 

XML的保存

XML 持久化存储到文件中去

 

 

1. 使用 DOM JDOM 之类的 API XML 数据结构直接写入文件

2. 使用 Transformation API for XML (TrAX) 和标识转换(identity transformation)持久化存储您的 XML

3. 使用 JAXB 之类的较高级别的 API 处理持久化存储

 

 

直接使用 API

 

如果使用一个或多个 API 读取 XML,那么很明显的一个方法就是使用与之相 同的 API XML 写入文件。比如说,如果您使用 JDOM API 和一个 JDOM Document 对象操作 XML,那么可以编写以下代码:

 

XMLOutputter outputter = new XMLOutputter();

outputter.setFormat(Format.getPrettyFormat());

outputter.output(myDocument, new FileWriter ("outputFile.xml"));

 

与此类似,在 DOM Level 3 中可以使用新的 Load Save API

 

DOMWriter writer = new  org.apache.xml.serialize.XMLSerializer();

writer.setNewLine("\r\n");

writer.setEncoding("UTF-8");

writer.writeNode(new FileOutputStream(new File("outputFile.xml")),  myDocument);

 

注意,使用新 DOM API 的方法多种多样,其中有一些具有较低的供应商独立 性。上面的示例代码中含有一个特定于 Xerces 的类,但是其他方法不会像它一 样与某个特定的供应商类紧密绑定在一起。从学习的角度来说,那些方法都不够 直观,因此我保留了特定于供应商的代码。

 

 

 

转换格式

另一个流行的选择是使用 TrAX 和标识转换。TrAX Transformation API for XML 的缩写,它现在是 JAXP 的一部分,而 Java 平台的每一个发行版中都 含有 JAXP(除了 Micro Edition)。TrAX 允许您使用 XSL 样式表对 XML 进行 转换。由于 XML 经常需要结合 SAX DOM 一起使用,因此 TrAX 可以接收 SAX 事件和 DOM Document 作为输入,并能够轻易地产生输出文件。此外,TrAX 还可以轻松地对这些格式进行相互转换。比如说,您可以使用以 DOM 表示的 XML 文档作为输入,并对它进行转换,然后再将输出发送到文件中。或者您也可 以读取文件中的内容,并对它进行转换操作,然后再将结果文档存储到 DOM Document 中。

 

这种方法的另外一个作用是,您可以使用一个不含任何文档操作的样式表, 并使用某种格式作为输入,然后将这种格式输出为任意其他的格式。使用不具转 换功能的样式表 实际上指不执行任何操作但回转所接收的输入内容的样式表 称作 标识转换(identity transformation)。因此您可以从文件中获得文 档,然后应用标识转换,最终在 DOM Document 中生成相同的 XML。如果您采用 相反的方式 DOM 到文件 那么实际上可以实现持久化存储 XML。这种 方法类似于以下过程:

 

Source domSource = new DOMSource(myDOMDocument);

Result fileResult = new StreamResult(new File ("outputFile.xml"));

TransformerFactory factory = TransformerFactory.newInstance ();

Transformer transformer = factory.newTransformer();

transformer.transform(domSource, fileResult);

 

此处,DOM 文档中的 XML 最终转换为了一个 outputFile.xml 文件。

 

使用数据绑定实现持久化存储

 

XML 转换为静态格式的另一种方法 特别是您希望这种格式是位于磁盘 上的文件 是使用 JAXB 之类的数据绑定 API。虽然通常人们不会考虑使用数 据绑定来实现持久化存储,但是它可以有效地实现:读取内存中表示的 XML 档并将其写入文件。

 

我没有太多时间详细介绍数据绑定的概念(您可以在 developerWorks 网站 上阅读一些这方面的文章);下面这段简短的代码使用了 JAXB 方式的数据绑定 实现持久性存储:

 

FileOutputStream stream = new FileOutputStream ("outputFile.xml");

Marshaller marshaller = myJaxbContext.createMarshaller();

marshaller.marshal(myJavaObject, stream);

 

您可以设置一些选项,比如说输出文件的编写,所有设置都在 Marshaller 对象中。事实上,JAXB 在设置输出属性方面的灵活性与前面两种方法是不相上 下的。

你可能感兴趣的:(xml)