Module java.desktop

Class Parser

java.lang.Object
javax.swing.text.html.parser.Parser
所有已实现的接口:
DTDConstants
直接已知的子类:
DocumentParser

public class Parser extends Object implements DTDConstants
一个简单的DTD驱动的HTML解析器。解析器从InputStream读取HTML文件,并在遇到标签和数据时调用各种方法(应在子类中重写)。

不幸的是,市面上有许多实现不良的HTML解析器,因此有许多格式不良的HTML文件。该解析器尝试解析大多数HTML文件。这意味着实现有时会偏离SGML规范,而更倾向于HTML。

解析器将\r和\r\n视为\n。在开始标签之后和结束标签之前的换行符将被忽略,就像在SGML/HTML规范中指定的那样。

HTML规范没有很好地指定空格如何被合并。具体来说,以下情况没有讨论(请注意这里应该使用一个空格,但我使用&nbsp来强制显示空格):

'<b>blah <i> <strike> foo' 可以被视为:'<b>blah <i><strike>foo'

以及:'<p><a href="xx"> <em>Using</em></a></p>',看起来被视为:'<p><a href="xx"><em>Using</em></a></p>'

如果strict为false,则当遇到中断流的标签(TagElement.breaksFlows)或尾随空格时,所有空格将被忽略,直到遇到非空格字符。这似乎更接近流行浏览器的行为。

参见:
  • Field Details

    • dtd

      protected DTD dtd
      dtd。
    • strict

      protected boolean strict
      此标志确定解析器是否严格执行SGML兼容性。如果为false,则对某些常见类别的错误HTML结构宽松。无论严格与否,在任何情况下都会记录错误。
  • Constructor Details

    • Parser

      public Parser(DTD dtd)
      使用指定的dtd创建解析器。
      参数:
      dtd - dtd。
  • Method Details

    • getCurrentLine

      protected int getCurrentLine()
      返回当前正在解析的行号。
      返回:
      当前正在解析的行号
    • makeTag

      protected TagElement makeTag(Element elem, boolean fictional)
      创建一个TagElement。
      参数:
      elem - 存储标签定义的元素
      fictional - 要为标签设置的“fictional”标志的值
      返回:
      创建的TagElement
    • makeTag

      protected TagElement makeTag(Element elem)
      创建一个TagElement。
      参数:
      elem - 存储标签定义的元素
      返回:
      创建的TagElement
    • getAttributes

      protected SimpleAttributeSet getAttributes()
      返回当前标签的属性。
      返回:
      包含属性的SimpleAttributeSet
    • flushAttributes

      protected void flushAttributes()
      删除当前属性。
    • handleText

      protected void handleText(char[] text)
      遇到PCDATA时调用。
      参数:
      text - 段落文本
    • handleTitle

      protected void handleTitle(char[] text)
      遇到HTML标题标签时调用。
      参数:
      text - 标题文本
    • handleComment

      protected void handleComment(char[] text)
      遇到HTML注释时调用。
      参数:
      text - 正在处理的注释
    • handleEOFInComment

      protected void handleEOFInComment()
      在不关闭HTML注释的情况下终止内容时调用。
    • handleEmptyTag

      protected void handleEmptyTag(TagElement tag) throws ChangedCharSetException
      遇到空标签时调用。
      参数:
      tag - 正在处理的标签
      抛出:
      ChangedCharSetException - 如果文档字符集已更改
    • handleStartTag

      protected void handleStartTag(TagElement tag)
      遇到开始标签时调用。
      参数:
      tag - 正在处理的标签
    • handleEndTag

      protected void handleEndTag(TagElement tag)
      遇到结束标签时调用。
      参数:
      tag - 正在处理的标签
    • handleError

      protected void handleError(int ln, String msg)
      发生错误。
      参数:
      ln - 包含错误的行号
      msg - 错误消息
    • error

      protected void error(String err, String arg1, String arg2, String arg3)
      调用错误处理程序。
      参数:
      err - 错误类型
      arg1 - 第1个错误消息参数
      arg2 - 第2个错误消息参数
      arg3 - 第3个错误消息参数
    • error

      protected void error(String err, String arg1, String arg2)
      使用第3个错误消息参数“?”调用错误处理程序。
      参数:
      err - 错误类型
      arg1 - 第1个错误消息参数
      arg2 - 第2个错误消息参数
    • error

      protected void error(String err, String arg1)
      使用第2个和第3个错误消息参数“?”调用错误处理程序。
      参数:
      err - 错误类型
      arg1 - 第1个错误消息参数
    • error

      protected void error(String err)
      使用第1、第2和第3个错误消息参数“?”调用错误处理程序。
      参数:
      err - 错误类型
    • startTag

      protected void startTag(TagElement tag) throws ChangedCharSetException
      处理开始标签。新标签被推送到标签堆栈上。检查属性列表以获取必需属性。
      参数:
      tag - 标签
      抛出:
      ChangedCharSetException - 如果文档字符集已更改
    • endTag

      protected void endTag(boolean omitted)
      处理结束标签。从标签堆栈中弹出结束标签。
      参数:
      omitted - 如果标签实际上不在文档中,但解析器假定存在,则为true
    • markFirstTime

      protected void markFirstTime(Element elem)
      标记文档中第一次看到标签的时间
      参数:
      elem - 标签表示的元素
    • parseDTDMarkup

      public String parseDTDMarkup() throws IOException
      解析文档类型声明标记声明。目前忽略它。
      返回:
      标记声明的字符串表示形式
      抛出:
      IOException - 如果发生I/O错误
    • parseMarkupDeclarations

      protected boolean parseMarkupDeclarations(StringBuffer strBuff) throws IOException
      解析标记声明。目前仅处理文档类型声明标记。如果是标记声明则返回true,否则返回false。
      参数:
      strBuff - 标记声明
      返回:
      如果这是有效的标记声明,则为true;否则为false
      抛出:
      IOException - 如果发生I/O错误
    • parse

      public void parse(Reader in) throws IOException
      解析HTML流,给定一个DTD。
      参数:
      in - 用于读取源的读取器
      抛出:
      IOException - 如果发生I/O错误
    • getCurrentPos

      protected int getCurrentPos()
      返回当前位置。
      返回:
      当前位置