[英]@Namespace in Android SimpleXml
我有這個文件XML:
<Name xml:lang="en">English</Name> <Name xml:lang="it">Italian</Name>
而我的班級:
@Element
@Namespace(reference = "en", prefix = "lang")
public class Name {
@Text
private String title;
@Override
public String toString() {
return title.toUpperCase() + "\n";
}
為什么當我做toString時,它不會只打印英文名字?
TNKS
你班上有些不對勁:
@Root
用於類,而不是@Element
@Namespace
,而不是屬性 如果您將類序列化為xml,您將得到如下內容:
<lang:name xmlns:lang="en">Example</lang:name>
- >與您的輸入不匹配。
這是一個更正版本:
@Root(name = "Name")
public class Name
{
@Text()
private String text;
@Attribute(name = "lang")
@Namespace(prefix = "xml", reference = "") // Add your reference here!
private String attr;
@Override
public String toString()
{
return text.toUpperCase() + "\n";
}
}
這序列化為:
<name xml:lang="en" xmlns:xml="">English</name>
請注意,還沒有參考設置 - 但您可以忽略它的屬性。
現在,您將獲得一個Name
到一個對象。 但是,您的xml包含這些列表。 因此,您需要另一個映射此列表的類:
@Root(name = "Names")
public class NameList
{
@ElementList(name = "Names", inline = true)
private List<Name> names;
}
對於測試,您也可以序列化:
<Names>
<Name xml:lang="en" xmlns:xml="">English</Name>
<Name xml:lang="it" xmlns:xml="">Italian</Name>
</Names>
請注意那些標簽。
這非常接近你的輸入; 記住: xmlns:xml
- 引用 - 可以忽略。 所以只需更正你的xml。 假設您有一個父元素Names
:
<Names>
<Name xml:lang=\"en\">English</Name>
<Name xml:lang=\"it\">Italian</Name>
</Names>
最后的測試現在:
final String xml = "<Names>"
+ "<Name xml:lang=\"en\">English</Name>"
+ "<Name xml:lang=\"it\">Italian</Name>"
+ "</Names>";
Serializer ser = new Persister();
NameList names = ser.read(NameList.class, xml);
System.out.println(names);
兩個條目都被反序列化為正確的names
。 使用另一個toString()
- 方法,我得到這個:
NameList{names=[Name{text=English, attr=en}, Name{text=Italian, attr=it}]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.