@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本机类的精品。
谢谢
答案 0 :(得分:1)
SAX接口允许解析器将文本节点分成多个部分,并在characters()方法的多个调用中提供这些部分。您的代码不允许这种可能性。允许解析器在任何地方中断文本,但通常的做法是在文本内容在输入中不连续的地方中将其分解,例如,在实体边界。