簡體   English   中英

Android SimpleXml中的@Namespace

[英]@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

你班上有些不對勁:

  1. 您必須將@Root用於類,而不是@Element
  2. 您為類設置了@Namespace ,而不是屬性
  3. 因為2.你沒有獲得屬性
  4. 您的命名空間的引用是否正確?
  5. 您的xml是一個列表 ,而不是一個類

如果您將類序列化為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM