前一阵子写了一篇JAXB的运用,其中讲了如何用JAXB生成XML Schame文件对应的类,也给出一个通过运用JAXB生成的类来组织XML文件,最后输出的例子!
这两天对JAXB进行了更深入的理解,发现既然可以用它来生成XML文件,为何不能读取其中的结点,然后获取其中的信息呢!下面给出对上次写生成的test.xml文件的读取的方法:
/**/
/*
* create by isle_t 2008-04-30
* 读取用jaxb根据xsd,生成的xml文件
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import primer.po.Items;
import primer.po.PurchaseOrderType;
import primer.po.USAddress;
public class MainOut {
public static void main( String[] args ) {
try {
// create a JAXBContext
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
Unmarshaller u = jc.createUnmarshaller();
JAXBElement customerE = (JAXBElement) u.unmarshal(new FileInputStream(
"test.xml"));
//读取出根结点PurchaseOrderType
PurchaseOrderType bo = (PurchaseOrderType) customerE.getValue();
//获取子结点USAddress
USAddress address = bo.getBillTo();
//获取name值
String addressname = address.getName();
System.out.println(addressname);
//获取另一子结点Items
Items item = bo.getItems();
List<Items.Item> itemList =item.getItem();
Iterator it = itemList.iterator();
while(it.hasNext()){
Items.Item ii =(Items.Item)it.next();
System.out.println(ii.getPartNum()+ " " + ii.getProductName() + " " + ii.getQuantity() +" " + ii.getUSPrice() + "" + ii.getShipDate() + " " + ii.getComment() );
}
} catch( JAXBException je ) {
je.printStackTrace();
} catch( IOException ioe ){
ioe.printStackTrace();
}
}
}
* create by isle_t 2008-04-30
* 读取用jaxb根据xsd,生成的xml文件
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import primer.po.Items;
import primer.po.PurchaseOrderType;
import primer.po.USAddress;
public class MainOut {
public static void main( String[] args ) {
try {
// create a JAXBContext
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
Unmarshaller u = jc.createUnmarshaller();
JAXBElement customerE = (JAXBElement) u.unmarshal(new FileInputStream(
"test.xml"));
//读取出根结点PurchaseOrderType
PurchaseOrderType bo = (PurchaseOrderType) customerE.getValue();
//获取子结点USAddress
USAddress address = bo.getBillTo();
//获取name值
String addressname = address.getName();
System.out.println(addressname);
//获取另一子结点Items
Items item = bo.getItems();
List<Items.Item> itemList =item.getItem();
Iterator it = itemList.iterator();
while(it.hasNext()){
Items.Item ii =(Items.Item)it.next();
System.out.println(ii.getPartNum()+ " " + ii.getProductName() + " " + ii.getQuantity() +" " + ii.getUSPrice() + "" + ii.getShipDate() + " " + ii.getComment() );
}
} catch( JAXBException je ) {
je.printStackTrace();
} catch( IOException ioe ){
ioe.printStackTrace();
}
}
}
如果我上次写的那篇JAXB的运用看过的话,可以更好的理解上面写的,在这里我没有读取每一个节点,只是将其中典型的列举出来了,如果你对JAXB不熟的话,要好好研究,还得多看看其它资料。