【问题标题】:Annotate class for SimpleXMLSimpleXML 的注释类
【发布时间】:2016-08-13 22:37:24
【问题描述】:

我正在尝试为这个 XML 文件创建 pojo,但没有成功

<?xml version="1.0" encoding="UTF-8"?>
<PCOWEB t="2010-03-22 11:48 ">
<PCO>
    <INTEGER_R>
        <O I="I00000" V="73"/>
        <O I="I00001" V="21"/>
        <O I="I00002" V="0"/>
    </INTEGER_R>
    <INTEGER_RW>
        <O I="H00200" V="5050"/>
        <O I="H00201" V="0"/>
        <O I="H00202" V="0"/>
        <O I="H00203" V="0"/>
    </INTEGER_RW>
    <DIGITAL_R>
        <O I="D00000" V="0"/>
        <O I="D00001" V="1"/>
        <O I="D00002" V="0"/>
        </DIGITAL_R>
    <DIGITAL_RW>
        <O I="C00200" V="0"/>
        <O I="C00201" V="0"/>
    </DIGITAL_RW>
</PCO>

我开始了

 @Root(name = "PCOWEB") //root of the xml file
public class PCOWEB {
    @Root(name = "PCO")
    public class PCO {

        })

    }

    @Element
    private String t;
}

但我收到一个错误: 属性“t”在第 1 行的 pojo 类中没有匹配项

【问题讨论】:

    标签: android xml xml-parsing simple-framework


    【解决方案1】:

    首先,您的 XML 文档无效,因为它在末尾缺少结束 &lt;/PCOWEB&gt; 标记。

    您的 Java 映射类存在几个问题。

    • 粘贴代码的第 6 行右括号处存在语法错误(可能是复制和粘贴问题)。
    • 您正在用@Element 注释t。但是,在您的 XML 文档中,t 不是一个元素,而是PCO 元素的一个属性
    • You cannot use inner classes with Simple XML。不过,您可以使用静态嵌套类(参见loose object mapping)。

    以此为起点:

    import org.simpleframework.xml.*;
    
    @Root(strict = false) // indicates that this is a loose (partial) mapping
    public class PCOWEB {
    
        @Root(strict = false)
        private static class PCO {
        }
    
        @Attribute
        private String t;
    
        @Element(name = "PCO")
        private PCO pco;
    
    }
    

    【讨论】:

      【解决方案2】:

      感谢帮助,最后看起来是这样的:

      @Root
      public class PCOWEB {
      
          @Attribute (name="t")
          private String time;
      
          @Element
          private PCO PCO;
      }
      
      public class PCO {
      
          @ElementList
          private List<Entry> INTEGER_R;
          @ElementList
          private List<Entry> INTEGER_RW;
          @ElementList
          private List<Entry> DIGITAL_R;
          @ElementList
          private List<Entry> DIGITAL_RW;
      }
      
      @Element (name="O")
      public class Entry {
          @Attribute (name="I")
          private String key;
          @Attribute (name="V")
          private String value;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        • 2023-03-24
        • 2019-02-17
        • 2011-09-24
        • 1970-01-01
        相关资源
        最近更新 更多