如何使用Java';谁有自己的解析器?

如何使用Java';谁有自己的解析器?,java,html-parsing,Java,Html Parsing,我不想下载任何其他库,我说的是这个:javax.swing.text.html.HTMLEditorKit.Parser 如何使用此解析器提取页面中的重复信息 例如,我在页面中重复了以下代码: <tr> <td class="info1">get this info</td> <td class="info2">get this info</td> <td class="info3"&g

我不想下载任何其他库,我说的是这个:
javax.swing.text.html.HTMLEditorKit.Parser

如何使用此解析器提取页面中的重复信息

例如,我在页面中重复了以下代码:

    <tr>
      <td class="info1">get this info</td>
      <td class="info2">get this info</td>
      <td class="info3">get this info</td>
    </tr>

获取此信息
获取此信息
获取此信息
能给我一些示例代码吗


提前感谢。

这是一个流解析器,因此当它解析时,它会告诉您它的作用。您应该使用一些类进行扩展(我称之为
解析器
),然后重写您关心的方法

我相信它只适用于“swing中的HTMLDTD”(请参阅)。如果您正在做更复杂的事情,建议您改用外部JavaHTML解析库,比如我之前链接到的一个

下面是基本代码():


Matthew Flaschen回答了你的直接问题。我只想补充几点建议:

>P>如果您对解析的HTML源具有某种程度的控制,则应考虑更改该源以更好的形式发布信息。例如,如果它是一个web服务器,让它尊重Accept头,并在请求时以(比如)XML或JSON格式提供信息

  • 如果您无法控制HTML的源代码,那么您将任由控制它的人摆布。如果他们更改HTML结构,您的解析可能会中断。无论您使用的是正确的HTML解析器还是(blech)正则表达式,这都适用

    您最好使用一个允许的HTML解析器(比如JSoup),它可以理解HTML规范的不同版本,并且或多或少地容忍违反规范的HTML。(使用严格的解析器的问题是,一个小错误,例如缺少
  • ,将导致页面不可解析…对于您的解析器来说…即使页面在大多数web浏览器中显示得很好。)

  • 限制自己只使用标准Java类库是个坏主意。标准库通常不能提供最佳解决方案


  • 好吧,你已经卖给我了。谢谢
    import javax.swing.text.html.parser.*;
    import javax.swing.text.html.*;
    import javax.swing.text.*;
    import java.io.*;
    
    class Parser extends HTMLEditorKit.ParserCallback
    {
            private boolean inTD = false;
    
            public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos)
            {
                    if(t.equals(HTML.Tag.TD))
                    {
                            inTD = true;
                    }
            }
    
            public void handleEndTag(HTML.Tag t, int pos)
            {
                    if(t.equals(HTML.Tag.TD))
                    {
                            inTD = false;
                    }
            }
    
            public void handleText(char[] data, int pos)
            {
                    if(inTD)
                    {
                            doSomethingWith(data);
                    }
            }
    
            public void doSomethingWith(char[] data)
            {
                    System.out.println(data);
            }
    
    }
    
    class HtmlTester
    {
            public static void main (String[] args) throws java.lang.Exception
            {               
                ParserDelegator pd = new ParserDelegator();
                pd.parse(new BufferedReader(new InputStreamReader(System.in)), new Parser(), false);
            }
    }