2014-01-04 6 views
0
@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>http://www.url.com/1815/e0deb0bcca75704ef974d017028563f401386541247.jpg</IMAGE> 
<FINAL_PRICE>24.9</FINAL_PRICE> 
<ORIGINAL_PRICE>49</ORIGINAL_PRICE> 

, когда я затем положить на консоль вывод из массивов скидок и получить URL изображения, это дает мне иногда только части этой строки, как

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

это произошло только в длинном тексте между открытым и вмещающими тегами Здесь также подключениями 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())); 

Im с помощью парсера SAX, потому что это fastes из родных классов Android.

Спасибо

ответ

1

Интерфейс SAX позволяет анализатору разбить текстовый узел на несколько частей и поставить части в нескольких вызовов символов метода(). Ваш код не учитывает эту возможность. Синтаксическому анализатору разрешено разрывать текст в любом месте, но обычная практика заключается в его разломе в местах, где текстовое содержимое не соприкасается с входом, например. на границах сущностей.