2017-08-24 55 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

希望它有帮助:-) –