gpt4 book ai didi

java - SimpleXML 解析不适​​用于 @ElementList

转载 作者:行者123 更新时间:2023-12-02 12:19:44 27 4
gpt4 key购买 nike

我在这个解析上挣扎了几个小时,所以我想也许你会有见解。我得到了这个 XML 结构:

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

我的类(class)是:

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>反而。我应该更改什么才能使其正常工作?

最佳答案

尝试这样

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 命名约定,变量以小写字母开头,变量名称也不应以下划线 _ 或美元符号 $ 字符开头。

还考虑将字段设为私有(private),并根据 OOP 原则使用 getter 进行正确封装(只是说,不确定是否这样做)

关于java - SimpleXML 解析不适​​用于 @ElementList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com