各位好。现在有一个从网上直接下载放入程序中的XML文件,下面代码是一个简单的例子:
<addresslist>
<title>
<![CDATA[IT-新浪博客]]>
</title>
<image>
<title>
<![CDATA[新浪博客频道]]>
</title>
<link>http://blog.sina.com.cn</link>
<url>http://www.sinaimg.cn/blog/main/index2010/blog_logo.png</url>
</image>
<description>
<![CDATA[IT博客列表]]>
</description>
<link>http://blog.sina.com.cn/lm/tech/</link>
<language>zh-cn</language>
<generator>WWW.SINA.COM.CN</generator>
<ttl>5</ttl>
<copyright>
<![CDATA[Copyright 1996 - 2013 SINA Inc. All Rights Reserved]]>
</copyright>
<pubDate>Tue, 17 Sep 2013 09:39:34 GMT</pubDate>
<category>
<![CDATA[]]>
</category>
    <linkman>
        <title> lixinghua</title>
        <email>[email protected]</email>
    </linkman>
   <linkman>
        <title> liuwei</title>
        <email>[email protected]</email>
    </linkman>
</addresslist>
我只需要解析linkman元素的子元素。其他的不解析。下面是我写的代码:
public class MySax extends DefaultHandler {
private List<LinkMan> all = null;// 保存数据
private LinkMan man = null;
private String elementName = null; @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
if (this.elementName != null) {
String data = new String(ch, start, length);
if ("title".equals(this.elementName)) {
this.man.setName(data);
} else if ("email".equals(this.elementName)) {
this.man.setEmail(data);
}

}
} public LinkMan getMan() {
return man;
} public void setMan(LinkMan man) {
this.man = man;
} public String getElementName() {
return elementName;
} public void setElementName(String elementName) {
this.elementName = elementName;
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("linkman".equals(qName)){
this.all.add(this.man);
this.man=null;//准备保存下次的数据
this.elementName=null;//将元素名称清空
}
} @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
this.all = new ArrayList<LinkMan>();// 开始解析,所以设置集合
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if ("linkman".equals(qName)) {
this.man = new LinkMan(); // 实例化LinkMan对象
this.elementName = qName; // 保存元素名称
}
}
public List<LinkMan> getAll() {
return all;
}
}。求解决方法javaxml

解决方案 »

  1.   

    找了好久终于找到了。
    原因是:
    在这处if ("linkman".equals(qName)) {
    this.man = new LinkMan(); // 实例化LinkMan对象
    this.elementName = qName; // 保存元素名称
    }
    你是当标签名称为linkman是才设置值,且值一直是linkman。当文件解析到title标签时,elementName的值还是linkman。所以你在characters()方法中判断时,两个if条件永远为false,所以你得不到值。你可以将this.elementName = qName;这句代码放到if语句上边。
    把你的代码改了下:
    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    this.elementName = qName; // 保存元素名称
    if ("linkman".equals(qName)) {
    this.man = new LinkMan(); // 实例化LinkMan对象
    }
    }
    @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    if ("title".equals(this.elementName)) {
    System.out.println(new String(ch, start, length));
    } else if ("email".equals(this.elementName)) {
    System.out.println(new String(ch, start, length));
    }
    }
    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    this.elementName = qName;// 将元素名称清空
    if ("linkman".equals(qName)) {
    this.all.add(this.man);
    this.man = null;// 准备保存下次的数据
    }
    }