2010-11-24 20 views
3

私はSAXを使用してXMLファイルを解析しています。 私のアプリケーションでのルート要素が " animalList"のXMLファイルを処理したいとしましょう。ルートノードが何か他のものであれば、SAXパーサーは解析を終了する必要があります。 DOMを使用してSAX解析中にルート要素を特定する

、あなたはこのようにそれを行うだろう:

... 
Element rootElement = xmldoc.getDocumentElement(); 

if (! rootElement.getNodeName().equalsIgnoreCase("animalList")) 
    throw new Exception("File is not an animalList file."); 
... 

が、私はSAXを使用してそれを行う方法を確認することはできません - 私はルートを決定するためにSAXパーサに指示する方法を見つけ出すことはできません素子。しかし、私はいつでも解析を中止する方法を知っています(留守番電話 Tom's solutionの後)。

XMLファイルの例:

<?xml version="1.0" encoding="UTF-8"?> 
<animalList version="1.0"> 
    <owner>Old Joe</owner> 
    <dogs> 
    <germanShephered>Spike</germanShephered> 
    <australianTerrier>Scooby</australianTerrier> 
    <beagle>Ginger</beagle> 
    </dogs> 
    <cats> 
    <devonRex>Tom</devonRex> 
    <maineCoon>Keta</maineCoon> 
    </cats> 
</animalList> 

感謝。

答えて

4

私は長年前にSAXを使用しましたが、APIを覚えていませんが、ハンドラが受け取る最初のタグはルート要素です。

boolean rootIsChecked = false; 

次に、あなたのハンドラに記述します:

if (!rootIsChecked) { 
    if (!"animalList".equals(elementName)) { 
     throw new IllegalArgumentException("Wrong root element"); 
    } 
    rootIsChecked = true; 
} 
// continue parsing... 
+0

おかげでたくさんのAlexRをだから、あなたはちょうどあなたが最初の要素をすでに確認しているかどうかを示すbooleanクラスのメンバを作成する必要があります。出来た! – engineervix

関連する問題