簡體   English   中英

SAX解析器忽略父元素? 結果將相同命名的元素分組

[英]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並不關注層次結構,但是您可以在代碼中對其進行補償。

在每個開始標記,字符內容和結束標記上,按它們出現的順序分別調用startElementcharactersendElement方法,因此您要做的是識別startElement<Selection>標記並在處理程序中設置一個標志記住要忽略發生的任何<name>標記,直到您取消設置</Selection>標記並在endElement方法中識別出該標記為止。

如果您發布更多的ContentHandler代碼,我可能會建議進行特定的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM