工作中运用SAX解析XML问题,急!!
<?xml version="1.0" encoding="GB2312"?>
<Root>
<Item><artnum>3562</artnum><bez>灯泡</bez><dim>null</dim><wstknz>null</wstknz><firknz>null</firknz><mee>只</mee><typkng>15w</typkng><typkngkmp>15w</typkngkmp><Orders><id>123456</id><date>2004-10-18</date><customer>HJQ</customer></Orders>
</Item>
<Item><artnum>3563</artnum><bez>灯泡</bez><dim>null</dim><wstknz>null</wstknz><firknz>null</firknz><mee>只</mee><typkng>12v 0.1A</typkng><typkngkmp>12v 0.1A</typkngkmp><Orders><id>123456</id><date>2004-10-18</date><customer>HJQ</customer></Orders>
</Item>
</Root>
上面需要解析的XML大致格式,用SAX解析的时候 事件处理器如下:
import org.xml.sax.helpers.DefaultHandler;
import java.util.*;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
public class infoHandler
extends DefaultHandler {
private Item currentItem;
private Vector items;
private Orders ordinfo;
private Vector orders;
private StringBuffer characters;
public infoHandler() {
}
public void characters(char[] ch, int start, int length) throws SAXException {
characters.append(ch, start, length);
}
public void startDocument() throws SAXException {
characters = new StringBuffer();
items = new Vector();
orders=new Vector();
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (qName.equals("Item")) {
currentItem = new Item();
}
else if(qName.equals("Orders"))
{
ordinfo=new Orders();
}
characters = new StringBuffer();
}
public void endElement(String uri, String localName, String qName) throws
SAXException {
String content = characters.toString();
if (qName.equals("artnum")) {
currentItem.setartnum(Integer.parseInt(content));
}
else if (qName.equals("bez")) {
currentItem.setbez(content);
}
else if (qName.equals("dim")) {
currentItem.setdim(content);
}
else if (qName.equals("wstknz")) {
currentItem.setwstknz(content);
}
else if (qName.equals("firknz")) {
currentItem.setfirknz(content);
}
else if (qName.equals("mee")) {
currentItem.setmee(content);
}
else if (qName.equals("typkng"))
{
currentItem.setfirknz(content);
}
else if (qName.equals("typkngkmp"))
{
currentItem.setfirknz(content);
}
/////////////////////////////////////////
else if(qName.equals("Orders"))
{
ordinfo=new Orders();
if(qName.equals("id"))
{
ordinfo.setoid(content);
}
else if(qName.equals("date"))
{
ordinfo.setodate(content);
}
else if(qName.equals("customer"))
{
ordinfo.setcustomer(content);
}
else if(qName.equals("Orders"))
{
orders.addElement(ordinfo);
currentItem.setOrdersInfo(ordinfo);
}
currentItem.setOrdersInfo(ordinfo);
}
/////////////////////////////////
else if (qName.equals("Item"))
{
items.addElement(currentItem);
}
}
public Vector getParseResults() {
return items;
}
}
解析完毕后,得到子节点<Order></Order>之间的数据为null,请哪位大虾帮忙看看事件处理器书写有些什么错误!!不胜感激,如果有更好的解析数据方法,请指教!!!谢谢!!