gpt4 book ai didi

java - Android SimpleXml 中的@Namespace

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:07 25 4
gpt4 key购买 nike

我有这个文件 XML:

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

我的类(class):

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

@Text
private String title;

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

为什么当我执行 toString 时,它不只打印英文名称?

谢谢

最佳答案

你的类(class)有些问题:

  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);

两个条目都被正确反序列化为名称。使用另一个 toString() 方法,我得到了这个:

NameList{names=[Name{text=English, attr=en}, Name{text=Italian, attr=it}]}

关于java - Android SimpleXml 中的@Namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307796/

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