AXIOM入门(一)

      AXIOM的全称为AXIs Object Model,最初是作为Apache Axis 2的XML对象模型开发的。但是后来变成了WS Commons Project的一部分,以便收益于Axis2外的其他项目。
Overview and Features
      AXIOM是一个实现了延迟构造和拉解析(pull parsing)的轻量级XML解析器。延迟构造是AXIOM的最重要的特性之一,它可以实现对象在使用时才构造。而这个延迟构造的功能实现是基于标准的拉式解析器——StAX。
What is Pull Parsing?
    简单介绍一下“拉式解析”的概念。一个XML文档可以通过“拉式”或“推式”中任意一种方式来解析。“拉式”是目前流行的XML解析方式。传统的XML解析框架,例如SAX和DOM都是“推式”的,那意味着解析过程是由解析器本身来控制的。这样的实现方式看似不错,并且使用方便,但是在解析大型XML文档时效率就差了,因为整个文档对象模型都要生成在内存里。而“拉式解析”刚好颠倒了解析过程中的控制关系,解析器只对用户指定的部分进行解析(好比传送带上的一盘盘寿司,我只取我感兴趣的那盘,而不是把经过我面前的都拿下来,筛选后再把不感兴趣的放上去,留下想吃的那部分)。这样用户可以决定是保存或是抛弃解析器生成的事件。OM(对象模型)便是基于“拉式解析”的。
Working with AXIOM
要使用AXIOM需要下载它的API包。AXIOM开始是作为AXIS2的一部分出现的,但现在已经可以单独下载了,当然在AXIS2的发布包里还是可以找到它的。
Creating an AXIOM
我们可以通过三种方式创建一个AXIOM:Pull Event stream,Push Event stream或者由程序自动创建。本文主要演示通过第一种和第三种方式来构建一个AXIOM,它们也是创建AXIOM最常用的方式。
Creating an AXIOM from an Input Stream
下面的代码演示了如何从一个文件输入流来创建一个AXIOM:

//首先需要创建一个parser或是reader,这里我们创建一个parser.
XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(file));
//然后需要创建一个builder来使用刚才创建的parser,这里我们使用StAXOMBuilder。
StAXOMBuilder builder = new StAXOMBuilder(parser);
//最后便可以通过builder获取一个document element。
OMElement documentElement = builder.getDocumentElement();


 

 

 

注意,当我们从builder获取到document element时,builder仅仅是返回一个指向,我们将要操作的XML数据仍然在数据流里,没有被取出来,对象树也没有被创建。对象树只有到我们导航或是构建AXIOM时创建。
Creating an AXIOM Using a String
现在,让我们通过一个字符串来创建AXIOM,这是一个非常简单、方便的方式。

String xmlString = "<book>" +
"<name>Quick-start Axis</name>" +
"<isbn>978-1-84719-286-8</isbn>" +
"</book>";
ByteArrayInputStream xmlStream = new ByteArrayInputStream(xmlString.
getBytes());
//create a builder. Since we want the XML as a plain XML, we can just use the plain OMBuilder
StAXBuilder builder = new StAXOMBuilder(xmlStream);
//return the root element.
OMElement documentElement = builder.getDocumentElement();



 


Creating an AXIOM Programmatically

//获取一个 factory
OMFactory factory = OMAbstractFactory.getOMFactory();
//使用这个factory来创建一个命名空间对象。
OMNamespace axis2 = factory.createOMNamespace("axis2","ns");
//使用这个factory来创建三个元素。
OMElement root = factory.createOMElement("book",axis2);
OMElement name = factory.createOMElement("name",axis2);
OMElement isbn = factory.createOMElement("isbn",axis2);


 


在上面的代码里,我们可以看到一组factory.create*方法。这些方法可以用来创建不同的XML对象。在AXIOM里,推荐使用这样的方法来创建AXIOM对象,因为这样可以使得在AXIOM的其它不同实现中切换变得简单。
Adding a Child Node and Attributes
到目前为止,我们已经学习了创建AXIOM和使用StAX的API,但这些对于使AXIOM工作起来还是不够的。我们还需要学习向AXIOM添加子节点。
在OMElement 接口中已经定义了基本的添加和删除方法:

public void addChild(OMNode omNode);
public void addAttribute(OMAttribute omAttribute);


 


下面让我们实现向root元素添加子节点:

root.addChild(name);
root.addChild(isbn);


 


*add()方法总是将新添加的子节点作为最后一个子节点加入到父节点中。
待续……

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值