首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SaxParser串联探头

SaxParser串联探头
EN

Stack Overflow用户
提问于 2013-08-12 18:04:19
回答 2查看 76关注 0票数 0

我有一个xml文件,如下所示

代码语言:javascript
复制
<Event Id="258" Key="123456">
<SubEvent Id="1">
Microsoft will begin selling its &quot;Kinect&quot; full-body motion-sensing game system from November 4, while Sony launched its &quot;Move&quot; motion-controlled gaming system on September 15.  
</SubEvent>
</Event>

解析器处理程序的一部分

代码语言:javascript
复制
public void startElement(String uri, String localName,String qName, 
            Attributes atts) throws SAXException {

    if (qName.equalsIgnoreCase("event")) {
         scored = false;
         event = true;
                   if (//my condition){
                        scored = true; 
                   }
                   if (scored){
                           sb= new StringBuffer();
     }
}

public void characters(char ch[], int start, int length) throws SAXException {

    if (event) {
        event = false;
    }

    if (subevent) {
                    if (scored){
                            sb.append(new String(ch, start, length));
                    }
        subevent = false;

    }
}

但这只会返回“Microsoft将开始出售其产品”

我读到解析器可能会调用多个字符。如何将不同的调用连接在一起?你能解释一下逻辑流程吗?

附加信息:我打印了所有的元素,看起来句子的其余部分没有被调用,为什么?

代码语言:javascript
复制
 Start Element :Event
 Start Element :SubEvent
 SubEvent: 
 Microsoft will begin selling its 
 End Element :SubEvent
 End Element :Event
 Start Element :Event
 Start Element :SubEvent
 SubEvent: 
 Nintendo will sell a new version of its DS handheld device that can play games and show movies in 3D without glasses sometime before March 2011. 
 End Element :SubEvent
 End Element :Event
EN

回答 2

Stack Overflow用户

发布于 2013-08-12 18:49:12

characters(char ch[], int start, int length)方法不能读取整行,您应该将字符存储在StringBuffer中并在endElement方法中使用它。

代码语言:javascript
复制
public void endElement(String uri, String localName, String qName) throws SAXException
{

     if (qName.equalsIgnoreCase("event")) 
     {
        System.out.println(sb.toString());
     }
     sb = new StringBuffer();
}
票数 0
EN

Stack Overflow用户

发布于 2013-08-13 09:53:53

解决了。

代码语言:javascript
复制
public void endElement(String uri, String localName,
    String qName) throws SAXException {
         if (qName.equalsIgnoreCase("event")) {
                scored = false;
            }
            if (qName.equalsIgnoreCase("subevent")){
                subevent=false;
            }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18184293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档