技术开发 频道

XML和Java: 低级或高级的XML API?

 使用中的灵活性

  大量的 XML API 还为我们提供了很多处理数据的方法。使用 SAX 和 DOM,能轻易地获得文档中的原始数据;使用 JAXP 也同样可行,尽管所支持的数据可能会少一点(我之前提到过必须要执行一些操作才能处理 XML 注释或 DTD 语法之类的数据)。我们在使用某个数据绑定 API 时,可以在根本上操作 XML 文档的数据而不需 XML 的修饰。person 元素变成了Person 对象,并且我们能够使用 getAge() 获取 age 属性的值。在很多方面,您可以根据在 XML 文档中使用数据的方式以及对 XML 的了解程度来选择 API。因此使用中的灵活性证实无误。

  错误处理中的灵活性

  这里遇到了些许麻烦,高级 API 的一些灵活性造成了一些问题。在一些 API 中,如 Sun 的 JAXB 和所提供的数据绑定 API 中,我们都是在 XML 文档的原始字符串、元素和属性之上的几个层次上进行操作的。其结果是,如果文档中的内容格式不正确,则处理任何问题都无法具备高度的灵活性。一般而言,在遇到某种编组或非编组错误时,我们必须要修复 XML 本身并重新运行该过程(或者向调用程序抛出异常,这在本质上是相同的)。但是在真正地修复错误并从解析器中获得详细信息的方面呢?这确实不属于高级 API 的范围。因此,此处出现了一个缺陷。

  操作 XML 文档中的灵活性

  上面所提到的使用中的灵活性,看上去可能与操作 XML 文档中的灵活性是一样的。其实并非如此;在很多新兴的(有些人会说是易于使用的)API 中,我们是在 XML 文档中操作数据的 — 然后有时甚至不是作为 XML 而是当作对象或者属性来进行操作的。操作 XML 文档本身意味着我们能直接更换、修改或者移除文档的一部分,并能直接处理元素名称、属性甚至注释和处理指令。

  最初看来可能并不是真正需要这一级别的处理和灵活性,但是我们想到了与编程的类比。正如 C 语言和汇编语言使核心编码器在计算机编程的底层进行工作,特别是 SAX 之类的 API,和程度较轻的 DOM,使核心的 Java 和 XML 程序员几乎可以随心所欲地操作 XML 文档。就像大多数技巧都内建在 C 语言或者汇编语言中,由于这种额外的能力转化成了真正的速度、性能和一些优化,比起一些高级的 API(如 JAXB 甚至是 JDOM),使用 SAX 和 DOM 仍然能为有经验的程序员提供更多的支持。因此,虽然这些高级 API 确确实实提供了大量的优势,但是它们并没有为直接操作实际的 XML 文档提供很多的灵活性。

  结束语

  就是这样:我就是想考证究竟有多大的灵活性。显而易见,这篇文章并不是一篇充满了运行代码的技巧文章,因为我想知道这些天来是否有人确实使用了运行的 XML 代码,以及他们所使用的是哪种(或哪些)API。真的有数百计、数千计或者数万计的读者仍然坚持使用 SAX 和 DOM 舒适地编写着 startProcessingInstruction() 方法,或者完全使用数据绑定和辅助 API 取代了 SAX 和 DOM?我对此非常好奇,大多数 developerWork 的编辑人员同样好奇。

  更重要的是,您是否认为自己仍然能够控制 XML 呢?我特别要向那些早期就开始处理 XML 的程序员提这个问题,那时 SAX 是快速读取 XML 的惟一选择,并且 DOM 是以对象的形式处理 XML 文档的惟一选择。您是否发现您自己在一个更高的级别工作?您是否对此满意?或者是否我们都已成为 Turbo Pascal 程序员,而只有少许人在他们的 ASM 终端上处理堆栈呢?

0
相关文章