2009-03-31 5 views
4

は、ルート・ノードを取得するためにDOMを使用して、その後childNodeが及びgrandChildNodeを循環が効率的であるか、または子の詳細情報を収集するために、XPath式を使用し、孫が効率的にノード以下のxmlDom4JでDOMを使用する場合と比較してXPathの効率はどれくらいですか?例えば

<root> 
    <childNode attribute1="value1"> 
    <grandChildNode attrib1="val1" attrib2="val2">some content1 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content2 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content3 
    </grandChildNode> 
    </childNode> 
    <childNode attribute1="value1"> 
    <grandChildNode attrib1="val1" attrib2="val2">some content1 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content2 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content3 
    </grandChildNode> 
    </childNode> 
    <childNode attribute1="value1"> 
    <grandChildNode attrib1="val1" attrib2="val2">some content1 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content2 
    </grandChildNode> 
    <grandChildNode attrib1="val1" attrib2="val2">some content3 
    </grandChildNode> 
    </childNode> 
</root> 

うを検討しますか?

答えて

8

XMLドキュメント全体を処理したい場合、XMLをDOMに解析することは、ほとんどの場合、デシリアライゼーション時間、CPU使用率、メモリ使用量の点で最も効率が悪くなります。

DOMに解析するには、XMLドキュメントに必要なディスク容量の約10-15倍のメモリが必要です。例えば、1メガバイトのXML文書は、10-15メガバイトのメモリを占有するDOMを解析します。

データの一部またはすべてを変更し、その結果をXMLドキュメントに戻す場合は、DOMを解析するだけです。他のすべてのユースケースでは、DOMは不適切な選択です。

XPathはしばしばリソースが重くなりませんが、これはドキュメントの長さ(つまり、いくつの 'childNode'要素があるか)と、ドキュメント内の興味のあるデータの場所によって異なります。

XPathのメモリ使用量と完了時間は、あなたが行ったドキュメントをさらに下げる傾向があります。たとえば、20,000個のchildNode要素を持つXML文書があり、各childNodeには事前にわかっている一意の識別子があり、文書から既知のchildNodeを抽出するとします。 18,345番目のchildNodeを抽出すると、3番目の抽出よりもはるかに多くのメモリが使用されます。

したがって、すべてのchildNode要素を抽出するためにXPathを使用している場合、DOMへの解析よりも効率が悪いことがあります。 XPathは一般的にXML文書の一部を抽出する簡単な方法です。私はXML文書のすべてを処理するためにそれを使用することをお勧めしません。

XML文書のすべてのデータを実際に抽出して処理する場合は、SAXベースのリーダーを使用することをお勧めします。これは他のどのアプローチよりも速く、重いリソースも少なくないでしょう。

つまり、扱っているデータの量にも依存します。あなたが与えたXML文書の例では、実際の違いに気付かないでしょう。はい、DOMは「遅い」SAXは「高速」になりますが、ミリ秒とマイクロ秒の違いがあります。

SAXは、DOMよりも数百倍または数千倍も簡単に高速化できますが、2マイクロ秒と2ミリ秒の差があれば気付かないでしょう。 20,000個のchildNode要素を含むドキュメントを扱う場合、200秒に対して2秒が問題になります。

関連する問題