0

I am trying to accomplish the following:

  1. load a document (done)
  2. go trough the document depth first and use a DefaultHandler from JDK to do some work

The reason I want to do this is that I already have my handler, and now I am using it with a SAX parser. I now want to use the handler on the in-memory document.

Note that this is useful in the following way: I have to use the handler multiple times. For large documents I want to use SAX, for small I want to use the internal representation.

Thanks!

4

1 に答える 1

1

これを実現する最も簡単な方法 (コーディングが速い) は、SAX で解析したい内部ドキュメントの部分を内部文字列に書き込み、StringReaderその文字列に基づく を使用して、ハンドラーを使用して SAX パーサーに渡すことです。 .

本当に必要なのは、データに基づいて SAX イベントを生成し、それらのイベントをハンドラーにフィードすることです。InputSourceこれを行うには、データをorの形式にしてから解析で使用します。これは上記の戦術です。または、既に記述Readerした のメソッドを直接呼び出して SAX イベントを単純にシミュレートすることもできます。ContentHandlerしかし、それらを正しい順序で呼び出し、正しいデータを供給して必要なことを達成することは、ドキュメントが複雑な場合は苦痛になる可能性があります。

Dom4J がInputSourceドキュメント構造内のノードに基づいて作成する方法を提供する場合、それが最も使いやすく、最初に文字列に書き込むよりもはるかに効率的です。

実際の作業を行う部分を、と内部ツリーをたどる新しいクラスContentHandlerの両方から使用できる別のクラスに抽出することを検討することをお勧めします。ContentHandler

于 2012-06-12T10:03:55.367 に答える