简单的 XML 框架:元素列表中的字符串在序列化时没有命名空间前缀

Posted

技术标签:

【中文标题】简单的 XML 框架:元素列表中的字符串在序列化时没有命名空间前缀【英文标题】:Simple XML Framework: Strings in elementlist not having namespace prefix when serializing 【发布时间】:2014-12-18 14:09:05 【问题描述】:

我有这个代码:

@ElementList(name = "Telefono")
@Namespace(reference = "efactura")
protected List<String> telefono;

有一个祖先:

@Namespace(prefix = "ns2", reference = "efactura")
public class CFEDefType  

它会生成:

 <ns2:Telefono class="java.util.Arrays$ArrayList">
     <string>12341234</string>
     <string>0303456</string>
 </ns2:Telefono>

当我期待时:

 <ns2:Telefono class="java.util.Arrays$ArrayList">
     <ns2:string>12341234</string>
     <ns2:string>0303456</string>
 </ns2:Telefono>

有可能实现吗?

【问题讨论】:

【参考方案1】:

您是否尝试过这样做:

@Namespace(prefix = "ns2")
public final class Ns2String extends String 

更新 由于doppelganger在cmets中写了不可能扩展String(它是最终的),所以他提出了这个(正确的)解决方案:

@Root(name="string")
@Namespace(reference = "efactura")
public static class Ns2String 
  @Text
  private String string = null;
  public Ns2String(String string) 
    this.string = string;
  
  public String getString() 
    return string;
  
  public void setString(String string)  
    this.string = string;
  

【讨论】:

嗯,它有点工作,首先,你不能扩展字符串,但它以某种方式做到了:@Root(name="string") @Namespace(reference = "efactura") public static class Ns2String @Text 私有字符串字符串 = null; public Ns2String(String string) this.string = string; 公共字符串 getString() 返回字符串; public void setString(String string) this.string = string; 是的,你是对的,String 是最后一门课,我会将你自己的答案与我的答案合并。

以上是关于简单的 XML 框架:元素列表中的字符串在序列化时没有命名空间前缀的主要内容,如果未能解决你的问题,请参考以下文章

java集合框架--List接口

Jackson 序列化:将字段值设置为 XML 元素名称

python中for循环的用法

序列化时带有特殊字符的 XML 元素名称

无法使用 Jackson XML 直接在根元素内反序列化列表

当元素可能是许多可能元素之一时,将 XML 元素反序列化为对象