English Italian And my class: ...">

@Namespace on Android SimpleXml

I have this XML file:

<Name  xml:lang="en">English</Name> <Name  xml:lang="it">Italian</Name>

And my class:

@Element
@Namespace(reference = "en", prefix = "lang")
public class Name {

    @Text
    private String title;

    @Override
    public String toString() {
        return title.toUpperCase() + "\n";
}

Why, when I do toString, it does not print only the name in English?

Tnks

+4
source share
1 answer

There are some things in your class:

  • You should use @Rootfor classes, not@Element
  • Your is @Namespaceset for the class, not the attribute
  • Due to 2. you do not get the attribute
  • Is your namespace referenced correctly?
  • Your xml is a list, not a single class

If you serialize your class in xml, you will get something like this:

<lang:name xmlns:lang="en">Example</lang:name>

-> Does not match your input.


Here's the adjusted version:

@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";
    }
}

It is serialized for:

<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}]}
+5

Source: https://habr.com/ru/post/1545239/


All Articles