2010-08-29 81 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"));