SAX Rss Разбор игнорирует пространство на setLink - PullRequest
0 голосов
/ 09 июня 2011

Я сделал RSS-ридер и мог бы помочь с небольшой проблемой. Когда rss XML настроен так:

<link>http://www.grants.gov/search/search.do?mode=VIEW&amp;oppId=98616</link>

мой читатель может нормально тянуть ссылку.

Но некоторые каналы, которые я пытаюсь прочитать, настроены так:

<link>
http://www.ornl.gov/info/ornlreview/v44_1_11/article06.shtml
</link>

, что заставляет моего читателя пропустить ссылку.

Я сузил проблему до:

    @Override
    public void characters(char[] ch, int start, int length)
        {
    // TODO Auto-generated method stub

    String strCharacters = new String(ch,start,length);
    if (itemFound==true){
    // "item" tag found, it's item's parameter
        switch(currentState){
        case state_title:
            item.setTitle(strCharacters);
            break;
        case state_description:
            item.setDescription(strCharacters);
            break;
        case state_link:
            item.setLink(strCharacters);
            break;
        case state_pubdate:
            item.setPubdate(strCharacters);
            break;  
        default:
            break;
        }
    }

strCharacters тянет строку в текущей строке, но с RSS с пробелом он просто тянет пробел. Любые идеи о том, как заставить его пропустить пустое пространство и перетащить ссылку на следующую строку?

Ответы [ 2 ]

1 голос
/ 07 ноября 2012
  1. Создание documentBuilderFactory

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();

    1. Создание DocumentBuilder

    DocumentBuilder builder = factory,newDocumentBuilder ();

    1. получить входной поток ClassLoader cls = DomReader.class.getClassLoader ();InputStream is = cls.getResourceAsStream ("XML-файл");
      1. синтаксический анализ файла xml и получение объекта Document путем вызова метода parse для объекта DocumentBuilder.Document document = builder.parse (is);
      2. Обход дерева dom с использованием объекта документа.SAX: простой разбор xml.Он анализирует узел за узлом. Обход осуществляется сверху вниз. Низкое использование памяти. С помощью sax навигация назад невозможна.

    // реализация необходимых обработчиков. Открытый класс SaxParse extends DefaultHandler {} // новый экземпляр saxParserFactory SAXParserFactory factory = SAXParserFactory.newInstance ();// НОВАЯ ИНСТАНЦИЯ SAX PARSER SAXParser saxparser = factory.newSAXParser ();// парсинг xml документа SAXParser.parse (новый файл (файл для анализа), новый SAXXMLParserImpl ());

0 голосов
/ 09 июня 2011

Ваш парсер выглядит странно, попробуйте сделать это вместо этого:

  private StringBuilder builder;   

  @Override
  public void startDocument() throws SAXException {
    super.startDocument();
    builder = new StringBuilder();
  }

  @Override
  public void characters(char[] ch, int start, int length) throws SAXException {
    super.characters(ch, start, length);
    builder.append(ch, start, length);
  }

  public void endElement(String uri, String localName, String name) throws SAXException {
    if (currentState == state_link) {
      item.setLink(builder.toString().trim());
    }
    builder.setLength(0);
  }

Таким образом, вы ждете, пока содержимое полностью не израсходуется, а не просто читаете одну строку текста.

...