Module java.desktop

Class DocumentParser

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

public class DocumentParser extends Parser
HTML文档的解析器(实际上,您可以指定一个DTD,但您应该只在swing中使用html dtd与此类一起)。读取HTML的InputStream并调用ParserCallback类中的适当方法。这是HTMLEditorKit用于解析HTML url的默认解析器。

这将为所有有效标签以及暗示但未明确指定的标签调用回调。例如,html字符串(<p>blah)只定义了一个p标签。回调将看到以下方法:

  1. handleStartTag(html, ...)
  2. handleStartTag(head, ...)
  3. handleEndTag(head)
  4. handleStartTag(body, ...)
  5. handleStartTag(p, ...)
  6. handleText(...)
  7. handleEndTag(p)
  8. handleEndTag(body)
  9. handleEndTag(html)
斜体中的项目是暗示的,也就是说,尽管它们没有明确指定,但为了正确的html,它们应该存在(head不是必需的,但仍然会生成)。对于暗示的标签,AttributeSet参数的键HTMLEditorKit.ParserCallback.IMPLIED的值将为Boolean.TRUE

HTML.Attributes定义了html属性的类型安全枚举。如果标签的属性键在HTML.Attribute中定义,则将使用HTML.Attribute作为键,否则将使用String。例如<p foo=bar class=neat>有两个属性。foo在HTML.Attribute中未定义,而class在其中定义,因此AttributeSet中将有两个值,HTML.Attribute.CLASS的String值为'neat',键'foo'的String值为'bar'。

位置参数将指示标签、注释或文本的开始。类似于数组,流中的第一个字符的位置为0。对于暗示的标签,位置将指示下一个遇到的标签的位置。在第一个示例中,暗示的开始body和html标签将具有与p标签相同的位置,而暗示的结束p、html和body标签将具有相同的位置。

由于html跳过空格,文本的位置将是第一个有效字符的位置,例如在字符串'\n\n\nblah'中,文本'blah'的位置将为3,换行符将被跳过。

对于没有值的属性,例如在html字符串<foo blah>中,属性blah没有值,AttributeSet的值中将放置两个可能的值:

  • 如果DTD不包含元素的定义,或者定义没有显式值,则AttributeSet中的值将是HTML.NULL_ATTRIBUTE_VALUE
  • 如果DTD包含显式值,例如:<!ATTLIST OPTION selected (selected) #IMPLIED>,则将使用DTD中的值(在本例中为selected)。

一旦流被解析,回调将被通知最可能的行尾字符串。行尾字符串将是\n、\r或\r\n中的一个,无论在解析流时遇到哪一个。

  • Constructor Details

    • DocumentParser

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