Module  java.desktop

Class DocumentParser

  • All Implemented Interfaces:
    DTDConstants


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

    这将消息所有有效标记的回调以及隐含但未明确指定的标记。 例如,html字符串(<p> blah)只有定义了ap标签。 回调将看到以下方法:

    1. handleStartTag(html,...)
    2. handleStartTag(头,...)
    3. handleEndTag(头)
    4. handleStartTag(body,...)
    5. handleStartTag(p,...)
    6. handleText(...)
    7. handleEndTag(p)的
    8. handleEndTag(体)
    9. handleEndTag(HTML)
    这些项目是斜体的,也就是虽然没有明确规定,但是正确的html应该是存在的(头不是必需的,但仍然是生成的)。 对于隐含的标签,AttributeSet参数的值为Boolean.TRUE ,键值为HTMLEditorKit.ParserCallback.IMPLIED

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

    position参数将指示标签,注释或文本的开始。 与数组类似,流中的第一个字符的位置为0.对于隐含的标记,位置将指示下一个遇到标记的位置。 在第一个示例中,隐含的起始正文和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(在这种情况下选择)中的该值。

    一旦流已被解析,回调通知最可能的行字符串结束。 行字符串的结尾将是\ n,\ r或\ r \ n中的一个,这在解析流中遇到最多。

    • 构造方法详细信息

      • DocumentParser

        public DocumentParser​(DTD dtd)
        使用指定的 dtd创建文档解析器。
        参数
        dtd - dtd。
    • 方法详细信息

      • parse

        public void parse​(Reader in,
                          HTMLEditorKit.ParserCallback callback,
                          boolean ignoreCharSet)
                   throws IOException
        解析一个HTML流,给出一个DTD。
        参数
        in - 读者从中读取来源
        callback - 回调
        ignoreCharSet - 如果 true字符集被忽略
        异常
        IOException - 如果发生I / O错误
      • handleStartTag

        protected void handleStartTag​(TagElement tag)
        处理起始标签。
        重写:
        handleStartTagParser
        参数
        tag - 正在处理的标签
      • handleComment

        protected void handleComment​(char[] text)
        描述从类别复制: Parser
        遇到HTML注释时调用。
        重写:
        handleCommentParser
        参数
        text - 正在处理的评论
      • handleEndTag

        protected void handleEndTag​(TagElement tag)
        处理结束标签
        重写:
        handleEndTagParser
        参数
        tag - 正在处理的标签
      • handleText

        protected void handleText​(char[] data)
        处理文本。
        重写:
        handleTextParser
        参数
        data - 段文本
      • handleError

        protected void handleError​(int ln,
                                   String errorMsg)
        描述从类别复制: Parser
        发生了错误。
        重写:
        handleErrorParser
        参数
        ln - 包含错误的行数
        errorMsg - 错误消息