首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓SAXParser Leftovers

安卓SAXParser Leftovers
EN

Stack Overflow用户
提问于 2012-09-05 15:45:18
回答 2查看 62关注 0票数 0

我有一个使用SAXParser解析XML的安卓应用程序。一切正常,除了一些文本被复制和修剪。例如:“即使你不知道怎么做,也要去做!”变成了“不知道怎么做!”

这是DefaultHandler代码。10倍!

代码语言:javascript
复制
DefaultHandler handler = new DefaultHandler()
    {
        Praise praise;
        String elementValue = null;
        Boolean elementOn = false;

        @Override
        public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException
        {

            if (localName.equals("praise"))
            {
                praise = new Praise();
                elementOn = true;
            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException
        {

            // elementOn = false;

            if (localName.equals("PRAISE_TEXT"))
            {
                praise.setPraiseText(elementValue);
            }
            if (localName.equals("MOOD"))
            {
                praise.setMood(elementValue);
            }
            if (localName.equals("RATING"))
            {
                praise.setRating(Integer.valueOf(elementValue));
            }
            if (localName.equals("praise"))
            {
                elementOn = false;
                if (update)
                {
                    if (database.getPraiseByText(praise.getPraiseText(), db) == null)
                    {
                        database.addPraise(db, praise.getPraiseText(), praise.getMood(),
                            Integer.valueOf(praise.getRating()));
                    }
                }
                else
                    database.addPraise(db, praise.getPraiseText(), praise.getMood(),
                        Integer.valueOf(praise.getRating()));
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException
        {
            // StringBuffer b = new StringBuffer();
            if (elementOn)
            {
                elementValue = new String(ch, start, length);}}};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 15:58:19

在SaxParsing中,您不能保证characters只被调用一次!

为此,您应该将收到的所有字符连接到同一元素中

这只是你的代码,做了一点小小的修改。您应该使用StringBuilder而不是字符串(:

代码语言:javascript
复制
DefaultHandler handler = new DefaultHandler()
    {
        Praise praise;
        String elementValue = null;
        Boolean elementOn = false;

        @Override
        public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException
        {
            elementValue = new String();

            if (localName.equals("praise"))
            {
                praise = new Praise();
                elementOn = true;
            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException
        {
            if (localName.equals("PRAISE_TEXT"))
            {
                praise.setPraiseText(elementValue);
            }
            if (localName.equals("MOOD"))
            {
                praise.setMood(elementValue);
            }
            if (localName.equals("RATING"))
            {
                praise.setRating(Integer.valueOf(elementValue));
            }
            if (localName.equals("praise"))
            {
                elementOn = false;
                if (update)
                {
                    if (database.getPraiseByText(praise.getPraiseText(), db) == null)
                    {
                        database.addPraise(db, praise.getPraiseText(), praise.getMood(),
                            Integer.valueOf(praise.getRating()));
                    }
                }
                else
                    database.addPraise(db, praise.getPraiseText(), praise.getMood(),
                        Integer.valueOf(praise.getRating()));
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException
        {
            // StringBuffer b = new StringBuffer();
            if (elementOn)
            {
                elementValue = elementValue + new String(ch, start, length);
            }
        }
    };
票数 0
EN

Stack Overflow用户

发布于 2012-09-05 15:59:16

这个问题经常出现在SaxParsing中。实际的问题是它用"/n“来中断字符串&只有字符串的最后一部分可供我们使用。现在来看解决方案,将不同的布尔值用于标记(包含问题或所有问题)。

在startElement方法中,使相关布尔值为真。

代码语言:javascript
复制
if (localName.equals("PRAISE_TEXT"))
{
  isPrase= true'
  praise.setPraiseText(elementValue);
}

在endElemet方法中,将相关布尔值设为假。

代码语言:javascript
复制
if (localName.equals("PRAISE_TEXT"))
{
  isPrase= false;
  praise.setPraiseText(elementValue);
}

在字符方法中检查布尔值,如下所示:

代码语言:javascript
复制
if(isPrase)
{
 elementValue = new String(ch, start, length);}}};

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12276770

复制
相关文章

相似问题

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