模块 java.desktop

类 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 文件。这意味着实现有时会偏离支持 HTML 的 SGML 规范。

解析器将 \r 和 \r\n 视为 \n。正如 SGML/HTML 规范中指定的那样,starttags 之后和结束标记之前的换行符将被忽略。

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>正在使用</em></a></p>'

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

参见:
  • 字段详细信息

    • dtd

      protected DTD  dtd
      dtd。
    • strict

      protected boolean strict
      该标志确定解析器是否严格执行 SGML 兼容性。如果为 false,它将对某些常见的错误 HTML 构造类宽容。严格与否,在任何一种情况下都会记录错误。
  • 构造方法详细信息

    • Parser

      public Parser(DTD  dtd)
      使用指定的 dtd 创建解析器。
      参数:
      dtd - dtd。
  • 方法详情

    • 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 - 第一个错误消息参数
      arg2 - 第二个错误消息参数
      arg3 - 第三个错误消息参数
    • error

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

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

      protected void error(String  err)
      使用第一个、第二个和第三个错误消息参数“?”调用错误处理程序。
      参数:
      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
      在给定 DTD 的情况下解析 HTML 流。
      参数:
      in - 从中读取源代码的读者
      抛出:
      IOException - 如果发生 I/O 错误
    • getCurrentPos

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