2010-08-29 2 views
1

Я пытаюсь разобрать уродливый HTML с помощью TagSoup для извлечения значения данного тега. Вот тег:Анализ XML с помощью TagSoup: ошибка с длинными атрибутами?

<input type="hidden" name="hash_check" value="ffc39410ed8da309408a9382450ddc85" /> 

Я хочу, чтобы получить значение атрибута "значение" ("ffc39410ed8da309408a9382450ddc85")

А вот мой код в моем SAX обработчика:

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException 
{ 
    if (localName.equals("input")) 
    { 
     Log.v(TAG, Integer.toString(atts.getLength())); 
     if (atts.getValue("name").equals("hash_check") 
     { 
      in_input = true; 
      Log.v(TAG, atts.getValue("name")); 
      if (atts.getValue("value") != null) 
       Log.v(TAG,atts.getValue("value"); 
     } 
    } 
} 

Журналы здесь для целей отладки. Logcat правильно дает мне «hash_check» для atts.getValue («name»), но пустую строку для atts.getValue («значение»), хотя синтаксический анализатор помещается в правый «ввод» (один и только из моего html-документа).

Что случилось? Ошибка в TagSoup?

Благодаря

редактировать @bkail: спасибо за ваш комментарий. Вот более подробная информация и код.

Во-первых, URL, который я пытаюсь разобрать: http://forum.hardware.fr/hfr/Programmation/Divers-6/experts-puissant-internet-sujet_37483_1.htm

И код, используемый для анализатору создании экземпляра:

private static final String FORUM_URI = "http://forum.hardware.fr/hfr/Programmation/Divers-6/experts-puissant-internet-sujet_37483_1.htm"; 
URL hfrUrl = new URL(FORUM_URI); 
Parser parser = new Parser(); 
HfrSAXHandler sh = new HfrSAXHandler(); 
parser.setContentHandler(sh); 
parser.parse(new InputSource(hfrUrl.openStream())); 

И, наконец, весь код для моего SAX парсера:

public class HfrSAXHandler extends DefaultHandler 
{ 
    private boolean in_input = false; 
    private static final String TAG = "hfr4droid"; 

    @Override 
    public void startDocument() throws SAXException 
    { 
     Log.v(TAG, "start of parsing"); 
    } 

    @Override 
    public void endDocument() throws SAXException 
    { 

    } 

    @Override 
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException 
    { 
     if (localName.equals("input")) 
     { 
      Log.v(TAG, Integer.toString(atts.getLength())); 
      if (atts.getValue("name") != null) 
      { 
       in_input = true; 
       Log.v(TAG, atts.getValue("name")); 
       if (atts.getValue("value") != null) 
        Log.v(TAG, Integer.toString(atts.getValue("value"))); 
      } 
     } 
    } 

    @Override 
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException 
    { 
     if (localName.equals("input")) 
      in_input = false; 
    } 
} 

Спасибо, что попробовали.

+0

После исправления ошибок синтаксического анализа, это работает для меня, используя TagSoup-1.2 на Java 6 на моем ноутбуке. Подробнее? Образец кода? –

+0

Спасибо за ваш ответ. Я редактировал свой пост, чтобы дать вам более подробную информацию. – Harkonnen

ответ

0

Использование Integer.toString() является проблемой. Изменить это:

Log.v(TAG, Integer.toString(atts.getValue("value"))); 

к этому:

Log.v(TAG, atts.getValue("value")); 
Смежные вопросы