Simple Framework を使用して xml をオブジェクトに解析しています。問題は、xml に同じ名前の要素があり、パスが異なることです。
XML:
<prestashop>
<products>
<product>
<name>
<language id="1"> name </language>
</name>
<description>
<language id="1"> description </language>
</description>
<description_short>
<language id="1"> desc </language>
</description_short>
</product>
</products>
</prestashop>
私のクラスは次のようにマッピングされます:
@Root(name="prestashop")
public class Product{
@Element(name="language")
@Path("products/product/description_short[1]")
private String shortDesc;
@Element(name="language")
@Path("products/product/description[1]")
private String longDesc;
@Element(name="language")
@Path("products/product/name[1]")
private String name;
}
しかし、逆シリアル化中に例外が発生します。
org.simpleframework.xml.core.PersistenceException:
Element 'language' is already used with @org.simpleframework.xml.Element(data=false, name=language, required=true, type=void)
on field 'name' private java.lang.String model.Product.name at line 8
同じ名前のタグを別のパスにマップするにはどうすればよいですか?
製品オブジェクトをシリアル化すると、正しい XML 構造が得られます。
<prestashop xmlns="http://www.w3.org/1999/xlink">
<products>
<product>
<description_short>
<language>short</language>
</description_short>
<id_default_image href="path"/>
<description>
<language>long</language>
</description>
<name>
<language>aaa</language>
</name>
<price>10.0</price>
<id>1</id>
</product>
</products>
</prestashop>
私はこのように逆シリアル化しています:
product = new Product();
InputStream in = res.getResponse();
Serializer serializer = new Persister();
serializer.read(product, in,false);