XML Library 1.0

org.koiroha.xml.parser
クラス HTMLDocumentBuilderFactory

java.lang.Object
  上位を拡張 javax.xml.parsers.DocumentBuilderFactory
      上位を拡張 org.koiroha.xml.parser.HTMLDocumentBuilderFactory

public class HTMLDocumentBuilderFactory
extends DocumentBuilderFactory

HTML ドキュメントビルダーファクトリです。well-formed でない HTML 文書を解析して DOM を 構築することが出来ます。このファクトリから生成されるビルダーは XML として正しくない文書構造を 内部で補正し、警告のみで DOM を作り上げます。この強引な方法は必ずしも全ての人の「想定通り」の DOM を生成するわけではない事に注意してください。特に、既存の HTML を XHTML に変換するよう な使い方をする場合には変換後の内容をよく確認してください。場合によってはビルダーが生成した DOM を「想定通り」に補正するプログラムが必要になるかもしれません。

このビルダーから生成されるパーサは解析対象が well-formed な XML であればおおよそ完全な DOM を生成する事が出来ますが完全な JAXP 互換を保証するものではなく、また標準の実装と置き換え られるものではありません。DOM の構築に実行環境の JAXP 実装を使用しています。

このクラスは JAXP で用意されている標準のドキュメントビルダーファクトリと同じ方法で使用する ことが出来ます。DocumentBuilderFactory の newInstance() メソッドにクラス名を指定して 下さい。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(
     "org.koiroha.xml.parser.HTMLDocumentBuilderFactory", loader);
 DocumentBuilder builder = factory.newDocumentBuilder();
 Document html = builder.parse(in);

また解析対象が HTML であることが明確である場合の簡易的な方法として new によって構築する事も できます。

HTMLBuilderFactory factory = new HTMLBuilderFactory();

導入されたバージョン:
2009/04/01 Java2 SE 5.0
バージョン:
$Revision: 1.5 $ $Date: 2010/02/24 13:59:38 $
作成者:
torao

フィールドの概要
static String FEATURE_HTML_OPTIMIZE
          HTML 要素を認識して適切な位置を設定する機能名です。
 
コンストラクタの概要
HTMLDocumentBuilderFactory()
          コンストラクタは何も行いません。
HTMLDocumentBuilderFactory(DocumentBuilderFactory factory)
          指定されたドキュメントビルダーファクトリを用いて HTML ドキュメントを作成するインスタンス を構築します。
 
メソッドの概要
 Object getAttribute(String name)
          このドキュメントビルダーファクトリの属性を参照します。
 boolean getFeature(String name)
          ファクトリの機能フラグを参照します。
 Schema getSchema()
          スキーマによる検証は実装されていません。
 InputSource guessInpuSource(InputStream in, String charset, int maxLength)
          指定されたバイナリストリームの内容を先読みして文字エンコーディングを決定し、解析に使用可能な 入力ソースとして返します。
 boolean isCoalescing()
          このファクトリから生成されるビルダーが CDATA セクションをテキストに展開するかどうかを 参照します。
 boolean isExpandEntityReferences()
          実装されていません。
 boolean isHtmlOptimize()
          HTML 解析時に要素名や属性名を小文字に変換するかどうかを参照します。
 boolean isIgnoringComments()
          このファクトリから生成されるビルダーがコメントを無視するかどうかを参照します。
 boolean isIgnoringElementContentWhitespace()
          実装されていません。
 boolean isLowerCaseName()
          HTML 解析時に要素名や属性名を小文字に変換するかどうかを参照します。
 boolean isNamespaceAware()
          このファクトリが生成したビルダーが名前空間を認識するかどうかを参照します。
 boolean isValidating()
          DTD による検証は実装されていません。
 boolean isXIncludeAware()
          XInclude は実装されていません。
 DocumentBuilder newDocumentBuilder()
          新規のドキュメントビルダーを構築します。
 void setAttribute(String name, Object value)
          ファクトリに属性値を設定します。
 void setCoalescing(boolean coalescing)
          HTML 中の CDATA セクションを通常のテキストとしてバインドするかを設定 します。
 void setExpandEntityReferences(boolean expandEntityRef)
          実装されていません。
 void setFeature(String name, boolean value)
          ファクトリの機能フラグを設定します。
 void setHtmlOptimize(boolean html)
          HTML 要素を認識して適切な位置への補正を行います。
 void setIgnoringComments(boolean ignoreComments)
          このファクトリから生成されるビルダーがコメントを無視するかどうかを設定します。
 void setIgnoringElementContentWhitespace(boolean whitespace)
          実装されていません。
 void setLowerCaseName(boolean lowerCase)
          HTML 解析時に要素名や属性名を小文字に変換するかどうかを設定します。
 void setNamespaceAware(boolean awareness)
          このファクトリから生成されるビルダーが XML の名前空間を認識するかどうかを設定します。
 void setSchema(Schema schema)
          スキーマによる検証は実装されていません。
 void setValidating(boolean validating)
          DTD による検証は実装されていません。
 void setXIncludeAware(boolean state)
          XInclude は実装されていません。
 
クラス javax.xml.parsers.DocumentBuilderFactory から継承されたメソッド
newInstance
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

FEATURE_HTML_OPTIMIZE

public static final String FEATURE_HTML_OPTIMIZE
HTML 要素を認識して適切な位置を設定する機能名です。定数値 "http://www.koiroha.org/sax/features/htmloptimize" を示します。

関連項目:
setHtmlOptimize(boolean), 定数フィールド値
コンストラクタの詳細

HTMLDocumentBuilderFactory

public HTMLDocumentBuilderFactory()
コンストラクタは何も行いません。


HTMLDocumentBuilderFactory

public HTMLDocumentBuilderFactory(DocumentBuilderFactory factory)
指定されたドキュメントビルダーファクトリを用いて HTML ドキュメントを作成するインスタンス を構築します。

パラメータ:
factory - ベースとなるファクトリ
メソッドの詳細

getAttribute

public Object getAttribute(String name)
                    throws IllegalArgumentException
このドキュメントビルダーファクトリの属性を参照します。

定義:
クラス DocumentBuilderFactory 内の getAttribute
パラメータ:
name - 属性名
戻り値:
属性の値
例外:
IllegalArgumentException - 属性名が認識できない場合

setAttribute

public void setAttribute(String name,
                         Object value)
                  throws IllegalArgumentException
ファクトリに属性値を設定します。

定義:
クラス DocumentBuilderFactory 内の setAttribute
パラメータ:
name - 属性名
value - 属性値
例外:
IllegalArgumentException - 属性名が認識できない場合

getFeature

public boolean getFeature(String name)
ファクトリの機能フラグを参照します。

定義:
クラス DocumentBuilderFactory 内の getFeature
パラメータ:
name - 機能名
戻り値:
機能フラグ

setFeature

public void setFeature(String name,
                       boolean value)
ファクトリの機能フラグを設定します。

定義:
クラス DocumentBuilderFactory 内の setFeature
パラメータ:
name - 機能名
value - 機能フラグ

setLowerCaseName

public void setLowerCaseName(boolean lowerCase)
HTML 解析時に要素名や属性名を小文字に変換するかどうかを設定します。 デフォルト値は true です。

パラメータ:
lowerCase - 小文字に変換する場合 true
関連項目:
LooseXMLReader.FEATURE_LOWERCASE_NAME

isLowerCaseName

public boolean isLowerCaseName()
HTML 解析時に要素名や属性名を小文字に変換するかどうかを参照します。

戻り値:
小文字に変換する場合 true

setHtmlOptimize

public void setHtmlOptimize(boolean html)
HTML 要素を認識して適切な位置への補正を行います。この機能は親が明らかな要素を正しい位置の 階層に移動します。この機能を使用することで </tr> などの記述忘れ、あるいは <li>, <p>, <option> のように終了記述の省略に寛容な要素を含む HTML から意図した DOM を構築できる可能性があります。

ただしこの機能を有効にした場合の副作用として、要素の意図していない移動が行われるかもしれ ません。

 <head>
   <noscript>
     <meta http-equiv="Refresh" content="0;url=http://...">
   </noscript>
 </head>
 

上記の例は <meta> 要素の親が <head> と認識しているために下記のように 補正されます。

 <head>
   <noscript>
     </noscript><meta http-equiv="Refresh" content="0;url=http://...">

 </head>
 

この機能を使用する場合はエラーハンドラに通知される警告に注目し、その補正が意図した通りの ものかどうかを確認する事を推奨します。特にトリッキーな (行儀の悪い) 記述を含む HTML から DOM を生成する場合はこの機能を無効にして自分で補正した方が良い場合があります。

この機能のデフォルト値は false です。

パラメータ:
html - 小文字に変換する場合 true
関連項目:
FEATURE_HTML_OPTIMIZE

isHtmlOptimize

public boolean isHtmlOptimize()
HTML 解析時に要素名や属性名を小文字に変換するかどうかを参照します。

戻り値:
小文字に変換する場合 true

setCoalescing

public void setCoalescing(boolean coalescing)
HTML 中の CDATA セクションを通常のテキストとしてバインドするかを設定 します。true を指定した場合、ビルダーが生成する DOM に CDATA セクションは含まれません。

オーバーライド:
クラス DocumentBuilderFactory 内の setCoalescing
パラメータ:
coalescing - CDATA セクションをテキストとして扱う場合 true

isCoalescing

public boolean isCoalescing()
このファクトリから生成されるビルダーが CDATA セクションをテキストに展開するかどうかを 参照します。

オーバーライド:
クラス DocumentBuilderFactory 内の isCoalescing
戻り値:
CDATA セクションをテキストとして扱う場合 true

setExpandEntityReferences

public void setExpandEntityReferences(boolean expandEntityRef)
実装されていません。HTML で定義されている実体参照は常に展開され、認識できないものは テキストとして扱われます。

オーバーライド:
クラス DocumentBuilderFactory 内の setExpandEntityReferences
パラメータ:
expandEntityRef - 実体参照を展開する場合 true

isExpandEntityReferences

public boolean isExpandEntityReferences()
実装されていません。HTML で定義されている実体参照は常に展開され、認識できないものは テキストとして扱われます。

オーバーライド:
クラス DocumentBuilderFactory 内の isExpandEntityReferences
戻り値:
実体参照を展開する場合 true

setIgnoringComments

public void setIgnoringComments(boolean ignoreComments)
このファクトリから生成されるビルダーがコメントを無視するかどうかを設定します。true を 指定した場合、ビルダーから生成される DOM がコメントが省略されています。デフォルトは false が設定されています。

オーバーライド:
クラス DocumentBuilderFactory 内の setIgnoringComments
パラメータ:
ignoreComments - コメントを無視する場合 true

isIgnoringComments

public boolean isIgnoringComments()
このファクトリから生成されるビルダーがコメントを無視するかどうかを参照します。

オーバーライド:
クラス DocumentBuilderFactory 内の isIgnoringComments
戻り値:
コメントを無視する場合 true

setIgnoringElementContentWhitespace

public void setIgnoringElementContentWhitespace(boolean whitespace)
実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の setIgnoringElementContentWhitespace
パラメータ:
whitespace - 無視可能な空白を無視する場合 true

isIgnoringElementContentWhitespace

public boolean isIgnoringElementContentWhitespace()
実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の isIgnoringElementContentWhitespace
戻り値:
無視可能な空白を無視する場合 true

setNamespaceAware

public void setNamespaceAware(boolean awareness)
このファクトリから生成されるビルダーが XML の名前空間を認識するかどうかを設定します。 名前空間を有効にした場合、ビルダーが生成する DOM の要素/属性は名前空間 URI とローカル名 を使用することが出来ます。 デフォルトは false に設定されています。

HTML ビルダーは文書中に名前空間が未定義の接頭辞が含まれていても DOM を生成する事が 出来ますが、そのような DOM は Transformer などで使用できない可能性がありますので注意 してください。

オーバーライド:
クラス DocumentBuilderFactory 内の setNamespaceAware
パラメータ:
awareness - 名前空間を有効にする場合 true

isNamespaceAware

public boolean isNamespaceAware()
このファクトリが生成したビルダーが名前空間を認識するかどうかを参照します。

オーバーライド:
クラス DocumentBuilderFactory 内の isNamespaceAware
戻り値:
名前空間が有効な場合 true

setSchema

public void setSchema(Schema schema)
スキーマによる検証は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の setSchema
パラメータ:
schema - 使用するスキーマ

getSchema

public Schema getSchema()
スキーマによる検証は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の getSchema
戻り値:
使用するスキーマ

setValidating

public void setValidating(boolean validating)
DTD による検証は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の setValidating
パラメータ:
validating - 検証を行う場合 true

isValidating

public boolean isValidating()
DTD による検証は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の isValidating
戻り値:
検証を行う場合 true

setXIncludeAware

public void setXIncludeAware(boolean state)
XInclude は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の setXIncludeAware
パラメータ:
state - XInclude が有効な場合 true

isXIncludeAware

public boolean isXIncludeAware()
XInclude は実装されていません。

オーバーライド:
クラス DocumentBuilderFactory 内の isXIncludeAware
戻り値:
XInclude が有効な場合 true

newDocumentBuilder

public DocumentBuilder newDocumentBuilder()
                                   throws ParserConfigurationException
新規のドキュメントビルダーを構築します。

定義:
クラス DocumentBuilderFactory 内の newDocumentBuilder
戻り値:
ドキュメントビルダー
例外:
ParserConfigurationException - パーサの構成が不正な場合

guessInpuSource

public InputSource guessInpuSource(InputStream in,
                                   String charset,
                                   int maxLength)
                            throws IOException
指定されたバイナリストリームの内容を先読みして文字エンコーディングを決定し、解析に使用可能な 入力ソースとして返します。HTTP の Content-Type ヘッダを用いて内容のエンコーディングを 決定するよりもコンテンツ内に記述されているエンコーディングを優先した方が適切な場合に使用 してください。

パラメータ:
in - 入力ストリーム
charset - デフォルトのエンコーディング
maxLength - ストリームから先読みする最大バイトサイズ
戻り値:
エンコーディングを推測した入力ソース
例外:
IOException - ストリームからの先読みに失敗した場合
関連項目:
AbstractSAXParserFactory.guessInpuSource(InputStream, String, int)

koiroha.org by takami torao