2010-08-29 112 views
1

我試圖用TagSoup解析醜陋的HTML來提取給定標記的值。 這裏是標籤:用TagSoup解析XML:長屬性的bug?

<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正確地爲atts.getValue(「name」)提供了「hash_check」,但是爲atts.getValue(「value」)提供了一個空字符串,儘管解析器被定位到正確的「輸入」(我的html文檔中唯一一個)。

怎麼了? TagSoup中的錯誤?

謝謝

編輯@bkail:感謝您的評論。這裏有更多的細節和代碼。

首先,我試圖解析的網址: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。更多細節?示例代碼? – 2010-08-29 16:55:52

+0

謝謝你的回答。我編輯了我的帖子,給你更多的細節。 – Harkonnen 2010-08-30 08:05:22

回答

0

使用Integer.toString()是問題所在。更改此:

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

這樣:

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