工作中运用SAX解析XML问题,急!!

boyhjq 2004-10-20 03:50:50
<?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,请哪位大虾帮忙看看事件处理器书写有些什么错误!!不胜感激,如果有更好的解析数据方法,请指教!!!谢谢!!
...全文
143 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
seamaid 2004-11-09
  • 打赏
  • 举报
回复
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("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);
}

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧