我正在尝试使用TagSoup解析丑陋的HTML以提取给定标记的值。 这是标签:
<input type="hidden" name="hash_check" value="ffc39410ed8da309408a9382450ddc85" />
我想检索属性“value”的值(“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 :(得分:0)
使用Integer.toString()
是个问题。改变这个:
Log.v(TAG, Integer.toString(atts.getValue("value")));
到此:
Log.v(TAG, atts.getValue("value") );