[英]SAX Parser ignoring parent elements? Same named elements grouped as a result
如果這只是SAX Parser應該工作的方式,或者我缺少某些東西,我不是。
這是我從服務器中提取的XML:
<Data>
<Item id="1">
<Group>
<Name>Question One</Name>
<type>true</type>
<Selection>
<Name>Answer 1</Name>
</Selection>
</Group>
</Item>
<Item id="2">
<Group>
<Name>Question Two</Name>
<type>true</type>
<Selection>
<Name>Answer 2</Name>
</Selection>
</Group>
</Item>
</Data>
如您所見,有一個名為“名稱”的元素在包含不同數據的不同父項下顯示兩次。 我試圖在ArrayList中收集“問題一”和“問題二”,其中我有一個setName getName的獲取器和設置器。 如標題所示,我的結果意味着即使答案也被收集到該類型的ArrayList中。
有沒有辦法只提取涉及問題一和問題二的“名稱”? 這是我現在在結束元素中的方式:
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if (qName.equalsIgnoreCase("name")) {
dataItem.setName(currentValue);
}
顯然,我只是在尋找名稱,但是當我嘗試將其用於“組”時,如果狀態里面沒有任何運氣,請再說一遍。 它本質上是在忽略父母,群體和選擇,而只是收集所有叫做名字的東西。 使用localName
也無濟於事。
在此先感謝您的幫助。
SAX並不關注層次結構,但是您可以在代碼中對其進行補償。
在每個開始標記,字符內容和結束標記上,按它們出現的順序分別調用startElement
, characters
和endElement
方法,因此您要做的是識別startElement
的<Selection>
標記並在處理程序中設置一個標志記住要忽略發生的任何<name>
標記,直到您取消設置</Selection>
標記並在endElement
方法中識別出該標記為止。
如果您發布更多的ContentHandler
代碼,我可能會建議進行特定的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.