問題タブ [apache-commons-digester]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - commons-digester を使用して XML ファイルを Java オブジェクトとして表現するにはどうすればよいですか?
Java での XML ファイルの解析に関する最近の質問を受けて 、commons-digester ライブラリを使用することにしました。このプロセスに慣れてきたので、XML ファイルを表す Java クラスを作成して、ユーザーがそのクラスの新しいオブジェクトをインスタンス化したときに、XML ファイルのすべてのデータを使用できるようにしたいと考えています。
これを説明するために、次の構造を持つ MyConfig.xml という XML ファイルがあります。
この XML ファイルを表す MyConfig.java という Java クラスもあります。XML ファイルの場所を取得し、XML ファイルの内容を解析して出力するコンストラクターがあります。クラスの構造は次のとおりです。
私の質問は、他のコンポーネントがクラスの新しいオブジェクトをインスタンス化するたびに、XML ファイルの内容がインスタンスで利用できるように、このクラスを変更するにはどうすればよいかということです。例えば:
現時点では、上記のインスタンス化によって java.lang.InstantiationException が発生します。
ありがとう。
java - いつ、なぜ Apache commons-digester を使用しますか?
Java を使用して xml を入力および出力するためのすべてのライブラリのうち、commons-digester が最適なツールである状況はどれですか?
java - 特定の属性の文字列をインターンするために apache-digester を取得する方法はありますか?
私は apache-digester を使用して XML ファイルをオブジェクト モデルにロードするのが大好きです。
多くの重複 (イベント ログ) を含む大きなファイルを扱っているため、特定の属性 (頻繁に繰り返されるもの) の文字列を String.intern() したいと考えています。
Apache-Digester は制御を放棄する前にファイル全体を読み取るため、最初は大量の重複を生成し、大量のメモリを消費します。その後、すべてのオブジェクトとインターンを反復処理できますが、それでも大量のメモリを使用するというコストがかかります。
もう 1 つの方法は、オブジェクト モデル内の対応する setProperty Bean 関数を常にパラメーターをインターンすることですが、既にインターンされている文字列に対してコード内から同じ関数を使用するため、無駄になります。その上、ダイジェスター固有のコードをモデルに導入したくありません。
プロパティを設定する前後に Digester をインターンまたはカスタム コードを実行させる方法はありますか?
java - Javaで、commons-Digesterが入力XMLファイルを処理する方法は?
私はJavaが初めてで、Javaプロジェクトで次のような声明に出くわしました。
rules.xml ファイルにはさまざまなパターンが含まれており、各パターンにはクラス名、メソッド名、その他のプロパティなどのさまざまな属性があります。
ダイジェスターについてグーグル検索しましたが、上記のステートメントに役立つ有用なものは見つかりませんでした。上記のステートメントを実行する際の手順を誰か教えてもらえますか? 実際、この XML の利点は何でしょうか?
java - CommonsDigesterがシングルトンオブジェクトを追加
XMLを持っていて、commons-digester1.8を使用してBeanのオブジェクトを作成しています。私のBeanには、シングルトンである別のBeanへの参照が含まれています。シングルトンオブジェクトの参照を作成/取得して、Beanにデータを入力する方法はありますか?
私のxmlには<language/>
タグが含まれており、このタグのBeanにはLanguage.class
参照があります。
Language.class
シングルトンであり、のインスタンスを取得するには、言語クラスLanguage.class
を呼び出す必要があります。getInstance(String name)
でもやってみると
エラーが発生します。これを達成する方法はありますか?ありがとう、Gagan
java - CommonsDigesterを使用してHashMapに解析します
xmlをHashMapに解析する必要があります。ここで、「キー」は2つの要素属性の連結です。xmlは次のようになります:
マップの最初のエントリで、「p1.c1」をマップキーとして、「value1」をマップ値として配置します。それを達成する方法は?
java - SAXParseException:'名前空間"null"にバインドされた属性""は、要素"metric"にすでに指定されています'
作業中、古いWebアプリをstruts 1.1から1.2.9に移行しました(できれば1.3に移行するための最初のステップ)が、commonsダイジェスターに問題があります。Struts1.2.9はcommons-digester1.6を使用します。
XMLファイルの1つを解析しようとすると、例外が発生します。
この問題を調査する際に、私は可能な限り単純なケースを取得しようとしましたが、これは現在私が持っているものです。
XMLが与えられます:
DTDは現在次のようになっています。
誰かが私が間違っていることを知っていますか?
defaultView属性を削除しても、エラーは発生しません。
sfusseneggerの提案に従って、私は次の(ダイジェスターではない)コードを試しました。
問題を再現できませんでしたが、ファクトリを使用する前に以下を追加すると(commons-digesterはXercesParserでも実行されます)、同じ例外が発生します。
最終的に、より新しいバージョンのxerces(2.7.1)を試してみることにしましたが、それはうまくいくようです。
java - commons Digester を使用して xml ファイルを解析し、java.util.Date オブジェクトを設定するにはどうすればよいですか?
サンプル XML。
サンプル Java クラス
Digester ルールのサンプル
java - commons digester を使用して、単一の xml エントリをオブジェクト内の複数のフィールドに解析するにはどうすればよいですか?
"Joe Smith" を名 "Joe" の姓 "Smith" にマップするにはどうすればよいですか?
名前を分割するコードは既にありますが、それを Digester で機能させる方法がわかりません。
java - Digester と XSLT 変換を使用して xml から特定の値を取得して除外する
apache.commons.digesterを使用して xml ファイルを処理しています
たとえば、xml は次のように構成されます。
Digester が xml を解析した後にループを回避したい。ファイルに関連する属性のみを取得するように指定できるルールはありますかname="XYZ.EXE'
アップデート -
私はこの質問をしたので、Googleで検索して、http: //wiki.apache.org/commons/Digester/FAQに出くわしました.Digesterを単独で使用すると、特定の値を持つ属性にアクセスできない. XSLT 変換 (org.xml.sax.XMLFilter) を使用する必要があります。どうすればいいのかわかりません。まだ解決策を探しています。どんな提案でも大歓迎です。