2011-12-02 65 views
1

我不知道如何正確說出這個問題,但我會舉例說明。使用SAXParser檢查多個標籤

enter image description here

假設我想知道標籤block的屬性type我可能只是

if (localName == "block") { 

    int type = Integer.parseInt(attributes.getValue("type)); 

不過,我也有描述blocktype本身不同的文件,至極使用<塊> 標籤作爲基本標籤。我必須知道該屬性是否是來自BOTH(級別/塊類型)AND塊的子項。或者,如果它在LevelArray和Block下。

我希望我有任何意義,我不知道太多的Xml/xmlparsing。

- 如何從嵌套在其他元素中的元素尋找屬性?

回答

0

你必須隨時跟蹤狀態。例如,您可以擁有一個名爲inBlockTag的實例變量,它最初是假的。在startElement方法中,如果localName.equals("block")那麼您可以將inBlockTag設置爲true。然後,當你處理其他元素時,你可以檢查該標誌的值,以確定你是否在塊中。如果你這樣做,不要忘記在endElement方法中將其設置爲false(同樣,當localName.equals("block"))。

0

如果我理解你是對的,那麼看起來你的問題在於你如何處理type屬性實際上取決於實際節點的結構;換句話說,如何處理type屬性取決於block元素是否具有父級「LevelArray」或block本身是否是文檔根元素。

在這種情況下,我認爲你需要圍繞SAX回調實現你自己的簡單狀態機。換句話說,當SAX解析器遍歷XML文件時,有一些跟蹤哪些元素已經被打開和關閉的變量。這將是一件非常簡單的事情。

另一種方法是使用DOM解析器,因爲DOM解析器使您可以獲取給定元素的子元素列表等。但是,除非您的要求非常複雜,否則我會堅持使用SAX解析器,按照建議執行狀態機。 DOM解析器比較重量級,使用起來更復雜。