2017-08-24 45 views
0

我正在爲這個解析工作掙扎幾個小時,所以我想也許你會有見解。 我得到這個XML結構:SimpleXML解析不能與@ElementList一起工作

<ItemSearchResponse> 
    <OperationRequest>...</OperationRequest> 
    <Items> 
     <Request> 
       <IsValid>true</IsValid> 
     </Request> 
     <TotalPages>16</TotalPages> 
     <Item> 
       <DetailPageURL>http://....</DetailPageURL> 
     </Item> 
      <Item>....</Item> 
      ... 
      <Item>....</Item> 
    </Items> 
</ItemSearchResponse> 

我的類別是:

Root(strict=false) 
public class ItemSearchResponse { 

    @ElementList 
    List<Item> Items; 
} 

和:

@Root 
public class Item { 
    @Element(name="DetailPageURL", required = false) 
    private String url; 
} 

當我運行下面的代碼:

InputStream is = ... // stream from xml; 
Serializer serializer = new Persister(); 
ItemSearchResponse response = serializer.read(ItemSearchResponse.class, is); 

我得到以下例外:

org.simpleframework.xml.core.ElementException: Element 'IsValid' does not have a match in class club.mymedia.shoppingadvisor.amazon.xml.Item at line 1 

看來的<Item>解析沒有工作,它解析<Request>代替。 我應該改變什麼才能使它工作?

回答

1

嘗試這樣

import java.io.InputStream; 
import java.util.List; 
import org.simpleframework.xml.Element; 
import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 
import org.simpleframework.xml.Serializer; 
import org.simpleframework.xml.core.Persister; 

class Main { 

    public static void main(String[] args) throws Exception { 
     Serializer serializer = new Persister(); 
     InputStream source = ClassLoader.getSystemResourceAsStream("myxml.xml"); 
     ItemSearchResponse itemSearchResponse = serializer.read(ItemSearchResponse.class, source); 
    } 
} 

@Root 
class ItemSearchResponse { 
    @Element(name = "Items") 
    Items items; 

    @Element(name = "OperationRequest") 
    String operationRequest; 
} 

class Items { 

    @Element(name = "Request") 
    Request request; 

    @Element(name = "TotalPages") 
    int totalPages; 

    @ElementList(inline = true, name = "Item") 
    List<Item> itemList; 
} 

class Request { 

    @Element(name = "IsValid") 
    boolean isValid; 
} 

@Root(name = "Item") 
class Item { 

    @Element(name = "DetailPageURL", required = false) 
    String url; 
} 

不要忘了Java命名約定有開始與小寫的變量,也變量名不應以下劃線_或者美元符號$字符開始。

還考慮將私人領域,並使用適當的封裝干將按照面向對象的原則(只是說,不知道你這樣做)

+0

的問題是,我有很多標籤......我需要他們的名單。 – Avisho

+0

更新了代碼 –

+0

希望它有幫助:-) –