扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月22日
关键字:
在本页阅读全文(共2页)
确保 xbean.jar, Order.jar 在 CLASSPATH 中。清单 2 是符合 Order.xsd 的示例 XML 文档,我们将编写一个程序来统计这个订单的总费用。
清单 2:Order.XML
<?xml version="1.0"?> < order xmlns =" http://www.ikigo.com/bods "> < header > < customer > Hitesh Seth </ customer > < po > 10001 </ po > </ header > < lines > < line > < no > 1 </ no > < item > Item 1 </ item > < price > 100 </ price > < qty > 100 </ qty > </ line > < line > < no > 2 </ no > < item > Item 2 </ item > < price > 50 </ price > < qty > 50 </ qty > </ line > < line > < no > 3 </ no > < item > Item 3 </ item > < price > 75 </ price > < qty > 75 </ qty > </ line > </ lines > </ order>
统计订单总费用的程序为 :
清单3:TotalPrice.java
import com.bea.xml.*;
import java.io.*;
import com.ikigo.bods.*;
import com.ikigo.bods.LineDocument.*;
import com.ikigo.bods.OrderDocument.*;
public class TotalPrice {
public static void main(String[] args) throws Exception {
OrderDocument doc =
(OrderDocument) OrderDocument.Factory.parse(new File("Order.xml"));
Order order = doc.getOrder();
Line[] lines = order.getLines().getLineArray();
float amt = 0;
for (int i = 0; i < lines.length; i++) {
amt += lines[i].getQty() * lines[i].getPrice();
}
System.out.println("Order Value: " + amt);
}
}
程序中使用了 OrderDocument.Factory.parse() 方法从磁盘文件中构造一个 OrderDocument 对象 doc ,然后通过 doc.getOrder().getLines().getLineArray() 方法得到 line 对象,并通过 FOR 循环统计订单总额。
XmlCursor代表着 XML 文档中两个逻辑令牌之间的位置。令牌本身不作为对象暴露,但是它们的类型和属性则可以通过 XmlCursor 去引用。使用 XmlCursor ,你可以通过 execQuery() 和 selectPath() 去执行 XQuery 和 XPath 表达式,对 XML 文档作 Inserting, Moving, Copying, Removing 操作。
使用 XmlCursor 重新改写后的 TotalPrice.java 如清单 4 所示。
清单4:TotalPrice.java
import com.bea.xml.*;
import java.io.*;
import com.ikigo.bods.*;
import com.ikigo.bods.LineDocument.*;
import com.ikigo.bods.OrderDocument.*;
public class TotalPrice {
public static void main(String[] args) throws Exception {
OrderDocument doc =
(OrderDocument)OrderDocument.Factory.parse(
new File("Order.xml"));
Order order = doc.getOrder();
float amt = 0;
XmlCursor cursor = order.getLines().newCursor();
cursor. toFirstChild ();
do {
Line line = (Line)cursor.getObject();
amt += line.getQty() * line.getPrice();
}
while (cursor. toNextSibling ());
System.out.println("Order Value: " + amt);
}
}
使用 XmlCursor 的 execQuery () 方法可以执行 XQuery 语句。使用清单 5 的程序可以列出 Order.xml 文档中订购数量大于 50 的行。
清单5:XQuery .java
import com.bea.xml.*;
import java.io.*;
import com.ikigo.bods.*
public class XQuery {
public static void main(String[] args) throws Exception {
OrderDocument doc =
(OrderDocument)OrderDocument.Factory.parse(new File("Order.xml"));
String query = " declare namespace o='http://www.ikigo.com/bods'";
query += " //o:line[o:qty>50]";
XmlCursor cursor = doc.newCursor().execQuery(query);
System.out.println(cursor.xmlText());
}
| 作者简介 | |
| 经乾是(dev2dev ID: jq75) BEA系统(中国)有限公司 渠道部技术顾问 | |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。