2012-03-19 9 views
0

JavaのXMLコンテンツに対していくつかの操作を行いたいと思います。ターゲットXMLに「OrderData」に置き換えている:我々は観察することができる唯一の違いは、「注文NS1は」root_element ..です示されているように、私はソースXMLを持っていると私はそのためのXMLを対象とするXML最高のパフォーマンスを備えたJavaのXML変換

From Source XML: 
<ns1:Order xmlns:ns1="com.test.ns" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <OrderHeader> 
     <Image>Image as BinaryData of size 250KB</Image> 
    </OrderHeader> 
</ns1:Order> 

Target XML: 
<OrderData> 
    <OrderHeader> 
     <Image>Image as BinaryData of size 250KB</Image> 
    </OrderHeader> 
</OrderData> 

の下を参照してください。

Fyiでは、OrderHeaderに250KBのバイナリイメージを保持する1つのサブ要素Imageがあります(したがって、このxmlは大きくなります)。また、ターゲットxml "OrderData"のルート要素も事前によく知られています。

ここでは、最高のパフォーマンスでjavaで上記の結果を達成したいと思います。私はSource XMLコンテンツを既にbyte []として持っていますが、ターゲットXMLコンテンツもbyte []として欲しいです.Saxパーサー。

上記の処理に最適なパフォーマンスを提供するソリューションを提供してください。

事前のおかげで、 Nurali

+2

大きなファイルでこのような単純な変換を行うには、おそらくSAXパーサーに行く必要があります。あなたのデータをbyte []に​​入れても、魔法のようにパフォーマンスは向上しません。 –

+0

さらに、このサイトはコード工場ではありません。これまでに何か試しましたか?あなたはFAQを読んだのですか? – home

+0

返信ありがとう::) 私はすでに文字列操作とRegExを使ってそれを達成していますが、もっと良い方法があるはずだと思いました。b'coz私はこのソリューションのパフォーマンスについて心配していました。ストリングでは、私はバイト[]またはchar [] ..で作業する必要がありますので、私はまた、サックスで私の手を汚すが、まだ解決策を達成するためにサックスを掘る..私が探しているものは、文字列/正規表現/サックス/ OrSomethingElse? ..と可能であれば疑似論理。 ありがとう、Nurali –

答えて

0

はずっと、例えば、正規表現を直接バイト/文字列操作を破ったわけではありません。

しかし警告され、正規表現でXMLを操作することは常にホットdebate

+0

正しい正規表現の解決策はおそらく非常に遅くなります。正しさを気にしない場合にのみ、このアプローチを使用してください。 –

+0

@Michael私たちのXML処理の99%(またはそれ以上)は、多くの明白な理由でSaxonが運営するXSLTを使用して行われているため、これに反対するつもりはありませんが、常にこのケースがあります。小さくてシンプルでよく定義された変更(私が理解するOPケース)を素早く行わなければならない大きなファイルが多数あります。そして、突然、CPUとメモリの消費が問題になるかもしれません。議論は技術対技術ではなく、保守/プロセスリスク対スピードです。 –

+0

ええ、そうですね、私は極端な状況では曲げないというルールは本にはありません。しかし、この要件は、このような絶望的な措置を正当化するのに十分な極端なものであるという証拠はない。 –

0

である私は、XML文書を変換するためにXLSTを使用。それはそれを行う別の方法です。 XLSTプロセッサのJava実装はいくつかあります。

0

Javaで文字列を操作する最も速い方法は、直接操作と結果のStringBuilderを使用することです。私は、変更箇所のテーブルを作成した20 MBの文字列を変更するコードを書いて、その文字列を新しいStringBuilderにコピーして変更しました。文字列の場合XSLTとRegExは直接操作よりもはるかに遅く、SAX/DOMパーサーは依然として遅いです。

+0

SAX-parserがRegExpよりも遅くなる必要はありません。 SAXは、ファイルを単純なリニアスキャンだけで終わらせます。 –

+0

SAXパーサーはDOMパーサーよりも高速ですが、RegExや直接的な文字列操作に比べて、さらにオーバーヘッドがかかるようです。良いニュースは、SAXパーサーは固定ペナルティを持っていますが、DOMパーサーはより大きなXMLファイルの方がはるかに遅くなるということです。 –

+0

ReqExや文字列のハッキングで「解析」が正しくできないため、このように比較するのはほとんど意味がありません。 –

1

マシンのパフォーマンスや人間のパフォーマンスを意味しますか?強力なコンピュータが契約プログラマの時間の半日と同じである今日、機械性能において微視的な利得を達成するためのプログラマ時間を無限に費やすことは、奇妙なトレードオフです。

XSLTの使用をお勧めします。それは最速ではないかもしれないが、それは十分に速いだろう。このような簡単な変換のために、XSLTのパフォーマンスは解析とシリアライゼーションのコストによって支配され、他のソリューションよりも悪くはありません。

関連する問題