Sax解析器没有得到全文,没有不允许或者&符号

时间:2014-01-04 21:09:15

标签: android xml sax saxparser

    @Override
    public void startElement(String uri, String localName, String qName,
                             Attributes attributes) {
        elementOn = true;
        if (localName.equals("DEAL")) {
            discount = new Discount();
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName){
        elementOn = false;
        if(localName.equalsIgnoreCase("IMAGE")) {
            discount.setImage(elementValue);
        } else if(localName.equalsIgnoreCase("DEAL")) {
            arrayDiscount.add(discount);
        }

    }

    @Override
    public void characters(char[] ch, int start, int length){

        if (elementOn) {
            elementValue = new String(ch, start, length);
            elementOn = false;
        }

    }

然后输入看起来像(我只粘贴了几行,前后还有很多行,很多,对象“包含IMAGE,PRICES和其他标签)

<IMAGE>http://www.url.com/1815/e0deb0bcca75704ef974d017028563f401386541247.jpg</IMAGE>
<FINAL_PRICE>24.9</FINAL_PRICE>
<ORIGINAL_PRICE>49</ORIGINAL_PRICE>

当我从折扣数组中获取控制台输出并获取图像网址时,它有时只给出了该字符串的一部分,如

http://www.url.com/1815/e0deb0bcc

IT只发生在打开和封闭标签之间的长文本中 这里也连接了SaxParser

SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();
URL url = new URL("http://www.url.com/output.xml");
XMLHandler myXMLHandler = new XMLHandler();
xmlR.setContentHandler(myXMLHandler);
xmlR.parse(new InputSource(url.openStream()));

我正在使用Sax Parser,因为它是来自Android本机类的精品。

谢谢

1 个答案:

答案 0 :(得分:1)

SAX接口允许解析器将文本节点分成多个部分,并在characters()方法的多个调用中提供这些部分。您的代码不允许这种可能性。允许解析器在任何地方中断文本,但通常的做法是在文本内容在输入中不连续的地方中将其分解,例如,在实体边界。