0

以下に説明するように、クエリを実行するxmlがあります。IDでクエリノードを取得するのに最適なパーサー(sax、DOM、xpath)はどれですか?

これが私に大いに役立つように、いくつかのサンプルコードでこれを説明してもらえますか?

idでクエリを読み取り、パラメータを渡すジェネリッククラスを作成したいと思います。すべてのクエリが異なる値のセットを返す可能性があるため、クエリの実行後に値を返すための最良の方法は何ですか?

<?xml version="1.0" encoding="UTF-8"?>
<queries>
    <query id="getUserByName">
        select * from users where name=?
    </query>
    <query id="getUserByEmail">
        select * from users where email=?
    </query>
</queries>
4

6 に答える 6

5

それは主にユースケースに依存します。

一般的に言えば、SAX Parser大きなファイルの解析やdom parser代替ファイルに適しています。

その理由はdom parser、大きなファイル/入力ストリームを解析するときに十分なメモリを消費することになります。

私の意見では、Sax Parserを最大限に活用するには、ある程度の経験が必要です。比較的dom解析は、習得と使用が簡単です。

あるいは、Saxと比較して簡単で、内部でsaxを使用するユースケースが許可されている場合は、 Apachecommons -digesterを代替案として使用できます。

そしてxpath、パーサーではありません。


あなたの場合、パーサーは必要ありません。を使用してSQLクエリを取得するためのxpathを探していると思いますxpath

単純なもののために新しいxmlを生成する必要がある場合xmlは、手動でそれを行うことができます。現在、これ以上の代替案を提案することはできません。

于 2012-08-01T13:26:12.753 に答える
3

使いやすさとプログラマーの生産性の順に優れています。SAXが最悪、XPathが最高です。

マシンサイクルの節約という点で優れています。SAXが最適で、XPathが最悪です。

したがって、プログラマーがコンピューターよりもコストがかかるかどうかによって異なります。通常、彼らはそうします。

于 2012-08-01T16:07:51.887 に答える
3

本当にSQLをXMLに入れて実行する場合は、MyBatisを使用します。

MyBatisを使用したくない場合は、JAXBを使用し、XML全体をクエリオブジェクトのリストとしてロードする必要があります。これは、クエリごとにXMLを再解析する必要がないためです。JAXBを使用するのがいかに簡単かをお見せしましょう。

@XmlRootElement(name = "queries")
public class Queries {
  @XmlElement(name = "query")
  public List<Query> queries;
}

public Query {
  @XmlAttribute
  public String id;
  @XmlValue
  public String sql;
}

Queries queries = JAXB.unmarshal(file, Queries.class);

上記はテストされていませんが、それはあなたにアイデアを与えるはずです。

于 2013-04-22T16:58:02.943 に答える
2

技術的には、XPathはクエリではなく、XMLドキュメントからノードを選択するためのクエリ言語です

SaXとDOMの主な違いは、DOMがすべてのドキュメントをメモリ構造にロードすることです。小さなXMLドキュメントの場合、それほど問題は発生しませんが、大きなXMLドキュメントの場合、メモリ使用量が問題になる可能性があります。一方、SaXはXMLドキュメントをストリーミング方式で処理するため、最終的にはドキュメント全体を表すオブジェクトモデルはありません。代わりに、ドキュメントで遭遇したデータを自分で追跡する必要があります。

この場合、私の選択はSaXを使用し、ドキュメント内のすべてのクエリを追跡することです。たとえば、Map<String, String>(キーはクエリIDで、値はクエリ自体です)。

于 2012-08-01T13:24:39.763 に答える
1

DOM仕様は、XMLドキュメントをナビゲートするためのツリーベースのアプローチを定義します。SAX仕様は、パーサーがXMLデータをスキャンし、ドキュメントの特定の部分でハンドラー関数を呼び出すイベントベースのアプローチを定義します。SAX仕様の強みは、スキャンできることです。リソース制限に達することなく、ギガバイト相当のXMLドキュメントを解析します

于 2012-08-01T13:39:51.340 に答える
0

Saxパーサーはあなたのケースに理想的です。私はSaxパーシングについてのブログ投稿を書きました

xmlパーサーの選択方法に関する別のブログ投稿

これらがお役に立てば幸いです。

于 2013-04-22T16:30:31.843 に答える