2010-11-24 37 views
3

我正在使用SAX解析XML文件。假設我想我的應用程序只有處理帶有根元素「 animalList」的XML文件 - 如果根節點是別的東西,則SAX解析器應該終止解析。確定SAX解析期間的根元素

使用DOM,你會做這樣的:

... 
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類成員,指示是否已經檢查的第一個元素:

boolean rootIsChecked = false; 

然後在您的處理程序中:

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

非常感謝AlexR。有效! – engineervix 2010-11-24 12:41:30