繁体   English   中英

使用TagSoup解析XML:具有长属性的bug?

[英]Parsing XML with TagSoup : bug with long attributes?

我正在尝试使用TagSoup解析丑陋的HTML,以提取给定标签的值。 这是标签:

<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”)一个空字符串,尽管解析器位于右侧的“ input”(我的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;
    }
}

感谢您尝试一下。

使用Integer.toString()是问题。 更改此:

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

对此:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM