接下来需要构造查询部分。我们想构造一个可以检索状态为 new 的所有车辆元素的查询。 XPath 中的等价做法是:
this/xq:vehicleList/xq:
vehicle[status='New']
我们把这个查询添加到表单的名称空间声明中:
private static final String
NEW_QUERY =
"declare namespace xq=
'http://example/schema'" +
"/xq:vehicleList/xq:
vehicle[status='New']";
在我们的操作方法中,将使用这个查询来过滤库存,您可以使用下面的代码来完成过滤操作:
XmlObject[] vehicles = (
XmlObject[])vehicleListDoc.
selectPath(NEW_QUERY);
if (vehicles.length > 0) {
inventory = (
VehicleDocument.
Vehicle[])vehicles;
}
从以前服务接收的 VehicleListDocument 开始,使用查询来选择由该查询定义的路径。 selectPath() 方法返回一个 XMLObject 的数组, XMLObject 是所有 XMLBean 的基类。因为我们知道已经查询过了 VehicleDocument.Vehicles ,所以可以安全地将它转换为特定的 XMLBean 类型,并更新库存数组。重新显示的时候,就可以只查看满足查询条件的车辆了。
利用选择
到现在为止,我们已经了解到, XMLBean 与 Web service 、 PageFlow 甚至数据控件的集成要相对容易一些。在该例中,我们有机会开发自己的服务,规定它返回我们选定的 XMLBean 。然而,很多时候这是不可行的,我们会发现自己把外部服务集成到了应用程序中。 Web service 出版商的数量不断增长——包括像 Yahoo! 、 Google 、 eBay 和 Amazon 这样的公司,这些公司允许我们与它们的著名服务进行集成。我们的任务是在应用程序中利用这些服务,只访问描述该服务的相关 WSDL 。
尽管听起来好像是不同的情形,实际上,它们是完全相同的。我们可以把这个 WSDL 文件编译为 XMLBean ,就像我们对 VehicleList.xsd 文件所做的那样。一旦我们的 XMLBean 可用,就可以从 WSDL 生成 Web service 客户机,而 Workshop 将再次意识到,我们拥有与 Web service 的方法相关的类型,并采用我们的 XMLBean 。在这种情况下, XMLBean 带给我们的优势就在其他技术之上,特别是因为我们需要的所有数据对象都已经通过一些鼠标单击为我们创建好了。希望这里给出的例子能够使您的视线触及到 XMLBean 可以完成的一些事情上,而且我们鼓励您在自己的应用程序中亲身体验使用它们的好处。
