2016-04-05 10 views
0

私はできるだけ早く属性を検索したい入力文書を持っています。例:以下かなり愚かな例です:org.w3c.dom.Documentの属性を検索する最速の方法

<PossibleSuspects> 
    <PossibleSuspect name="A" id="423" character="shady"/> 
    <PossibleSuspect name="B" id="423" character="normal"/> 
    <PossibleSuspect name="C" id="423" character="normal"/> 
    <PossibleSuspect name="A" id="423" character="shady"/> 
</PossibleSuspects> 

は基本的に、私はcharacterが日陰である行のname属性を取得したいです。私はそのような最初の試合で大丈夫です(他の人は無視できます/同じnameを持つでしょう)。

ドキュメント全体をループし、ドキュメントを文字列に変換した後に最初の一致と正規表現の検索を行うと考えました。

どちらが速いでしょうか?

+1

regexを使用することはお勧めしませんが、スピードの問題がある場合は、DOMツリーを構築する必要のないプルパーサー(検証なし)を選択することができます。 http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html –

答えて

1

スピードが本当に問題になる場合は、文字列ドキュメントを正規表現(lucky you、XML is no HTML)で検索してください。しかし、XMLの属性の順序付けは保証されていないことを考慮する必要があります。また、Scannerが役に立ちます。

あなたのコードのシンプルさがより重要である場合、私はどちらかのXpath

XPath xpath = XPathFactory.newInstance().newXPath(); 
String name = xpath.evaluate("//PossibleSuspect[@character='shady']/@name",document); 

そしてそのないというスローを使用することをお勧めします。

+0

XMLは確かに簡単に解析されますが、[一見しただけでは簡単ではありません](http://stackoverflow.com)/a/702222/1831987)。 – VGR

+1

は、パフォーマンスと柔軟性/互換性のトレードオフです。私はめったにXML処理が本当にタイムクリティカルな機会を見たことがないので、xpath方法を好むでしょう。それにもかかわらず、SAXやXMLStreamなどのイベント駆動型のアプローチがおそらく良い選択肢になるでしょう。 –

関連する問題