使用 Quick 在 Java 对象和 XML 之间进行转换
2010-03-25 00:00:00 来源:WEB开发网将原始文件与 清单 7 中显示的文件相比,您应该看到这些更改相当明显;它们都涉及将 XML 特性映射成正确的 Java 特性名,如源代码中所定义的那样(请参阅清单 4、 5和 6来复习一下)。
创建 QIML
您几乎已经完成了设置工作;但仍需要执行最后一步。Quick 使用 QIML( Quick 内部标记语言(Quick Internal Markup Language))文件可以执行得更好。顾名思义,Quick 使用该内部格式以避免 QJML 文件的运行时编译、转换和处理。执行下列简单步骤,使 QJML 成为 Quick 可以更方便使用的格式:
sh cfgQjml2Qiml.sh -in=person.qjml -out=person.qiml
最后,为进一步改进性能,将这个基于文本的格式转换成可以编译的 Java 源文件(使用二进制对象总是比使用未编译的文本文件格式好):
sh cfgQiml2Java.sh -in=person.qiml -out=PersonSchema.java
-class=PersonSchema -key=person.qjml
您真的不必对此处发生的事情太担心;它完全是特定于 Quick 的,实用程序会处理它们。现在,您应该编译这个创建的源文件(以及其余的 Java 源文件,如果还未创建的话)并确保将所有内容都添加到类路径中。这些步骤全部完成之后,您可以开始做一些数据绑定工作。
数据绑定
所有设置工作都完成之后,使用 Quick 框架将 XML 文档转换成 Java 字节码然后再转换回来的工作就很简单了。我将会使它的示例简单化;一旦您获得了基础知识,就可以得心应手地使用数据绑定,虽然我不知道您的用例,但我让您从样本代码中获取您所需要的信息并开始工作!请看一下 清单 8,然后我将解释主要的概念。
清单 8. 在 Java 中使用 Quick
import java.util.Iterator;
// Quick imports
import com.jxml.quick.QDoc;
import com.jxml.quick.Quick;
public class PersonTest {
public static void main(String[] args) {
try {
if (args.length != 2) {
System.err.println("Usage: java PersonTest [input file] [output file]");
return;
}
// Initialize Quick
QDoc schema = PersonSchema.createSchema();
// Convert input XML to Java
QDoc doc = Quick.parse(schema, args[0]);
// Get the result
Person person = (Person)Quick.getRoot(doc);
// Output block
System.out.println(" --------------- Person ------------------ ");
System.out.println(" First Name: " + person.getFirstName());
System.out.println(" Last Name : " + person.getLastName());
for (Iterator i = person.getAddressList().iterator(); i.hasNext(); ) {
Address address = (Address)i.next();
System.out.println(" Address (" + address.getType() + "):");
System.out.println(" " + address.getStreet());
System.out.println(" " + address.getCity() + ", " + address.getState() +
" " + address.getZipCode());
}
for (Iterator i = person.getPhoneNumberList().iterator(); i.hasNext(); ) {
PhoneNumber number = (PhoneNumber)i.next();
System.out.println(" Phone Number (" + number.getType() + "):");
System.out.println(" " + number.getNumber());
}
// Add a new address
Address address =
new Address("work", "357 West Magnolia Lane", "Waco", "TX", "76710");
person.getAddressList().add(address);
// Change a phone number
PhoneNumber number = (PhoneNumber)person.getPhoneNumberList().get(1);
number.setNumber("2547176547");
// Write out modified XML
Quick.express(doc, args[1]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
处理 Quick 的代码部分原来只有四行!必须先装入 QIML(已编译为 Java 字节码),以便让 Quick 知道哪些 XML 元素和属性变成哪些 Java 类和特性。通过生成的 PersonSchema 类的 createSchema() 方法(它是静态的)来完成这一任务。一旦装入该模式,就将它和输入文件传递给 Quick.parse() 方法,由该方法执行转换。从那里开始,您只需获取产生的 QDoc 的根元素并象使用任何其它 Java 对象那样使用它。在最后几行代码中再次用到了 Quick ,其中 express() 方法输出一个已修改的 XML 版本。非常简单,不是吗?
注: 不要 为输入和输出提供相同文件名,因为这样会覆盖原始数据,并且会发生各种不可预料的事情。
结束语
很好,您已经在这里看到了一些真正能让您感兴趣的功能。首先,数据绑定通常可以使编程任务变得非常简单,特别是当您需要将数据持久存储到某种类型的静态存储器(如本文中所示的文件)中时更是如此。另外,Quick 为您在自己的项目中完成这一任务提供了一种快速、简单的方法。研究一下使用 Quick 的代码块,了解您是否喜欢它。希望您喜欢,希望能在网上与您见面。
更多精彩
赞助商链接