0

Digester で XML を解析しています。その一部には、PDF に変換する必要がある不可解な疑似 HTML XML 要素でフォーマットされたコンテンツが含まれています。これは Apache FOP を介して行われます。したがって、コンテンツ要素を含む xml 要素に直接アクセスし、それを FOP にパイプする必要があります。そうするために、Digester FAQには次のいずれかが記載されています。

ネストされた xml を CDATA でラップする

また

これができない場合は、NodeCreateRule を使用して body タグとその子を表す DOM ノードを作成し、その DOM ノードをシリアライズしてテキストに戻す必要があります。

これはサードパーティの XML であるため、このCDATAアプローチは (別の) XSLT を介してのみ実行できますが、私は躊躇しています。

この問題はNodeCreateRuleで解決できるはずですが、解決方法がわかりません。

ドキュメントにはNodeCreateRule、ノードをスタックにプッシュすると記載されていますが、null を渡すことしかできません。

私は試した

digester.addRule(docPath + "/contents", new NodeCreateRule());
digester.addCallMethod(docPath + "/contents", "setContentsXML");

setContentsXML には Element パラメータが必要です。

私もこれこれを試してみましたが、運がありませんでした。

最新の安定した Digester を使用しています。アドバイスをいただければ幸いです。

更新:バグが見つかりまし た 。私のシステムでの結果も null です。JDK 6u24 を使用しています

4

1 に答える 1

0

私の場合の問題とリンクされたバグは、 の適切なシリアル化にありElementます。私の場合、前述の null 値は Digester ではなく によって返されましたElement#toString()。JDK 1.4以降、何かが変更されたと思います。

バグの例では:

result実際のコンテンツを持つ別の(テキスト) ノードが含まれています。ただし、toString() は、呼び出された Element インスタンスのコンテンツを単純に取得します。要素ツリーは明示的にシリアル化する必要があります。たとえば、このの使用例のシリアル化方法ではNodeCreateRule.

他の誰かが Digester 3 でそれを使用しようとした場合:SetSerializedNodeRule#end()メソッドのシグネチャをに変更する必要がありますSetSerializedNodeRule#end(String, String)

于 2012-01-05T07:45:55.027 に答える