【问题标题】:Reading XML value to populate Java variable读取 XML 值以填充 Java 变量
【发布时间】:2012-09-22 06:12:47
【问题描述】:

我正在使用 xstream 将一些 XML 转换为 Java 对象。 XML 模式的格式如下:

<Objects>   
<Object Type="System.Tuning" >4456</Object> 
<Object Type="System.Lag" >7789</Object>    
</Objects>

基本上,父对象标签可以有 n 个对象标签。为此,我对我的班级进行了这样的建模:

class ParentResponseObject {    
    List <ResponseObject>responseObjects = new ArrayList<ResponseObject>();
    public ParentResponseObject() {
        // TODO Auto-generated constructor stub
    }
}
class ResponseObject {
       String Type;
       String Value;
    public ResponseObject() {

    }
}

最后我使用下面的代码来填充我的 java 类:

XStream s = new XStream(new DomDriver());
  s.alias("Objects", src.core.PowerShell.MyAgain.ParentResponseObject.class);
  s.alias("Object", src.core.PowerShell.MyAgain.ResponseObject.class);  
  s.useAttributeFor(src.core.PowerShell.MyAgain.ResponseObject.class, "Type");  
        s.addImplicitCollection(src.core.PowerShell.MyAgain.ParentResponseObject.class, "responseObjects");     
        ParentResponseObject gh =(ParentResponseObject)s.fromXML(k1);

使用useAttribute 方法,我可以读取对象类型的“类型”属性,但是如何读取标签中的值,如 4456、7789 并将其填充到变量 ResponseObject.value 中。

【问题讨论】:

    标签: java xml xml-parsing xml-serialization xstream


    【解决方案1】:

    您需要使用ToAttributedValueConverter。使用 xstream 注释很容易做到这一点,如下所示:

    @XStreamAlias("Object")
    @XStreamConverter(value = ToAttributedValueConverter.class, strings = { "value" })
    public class ResponseObject {
    
        @XStreamAlias("Type")
        private String type;
    
        private String value;
    
        public ResponseObject() {
        }
    
        public String getType() {
            return type;
        }
    
        public String getValue() {
            return value;
        }
    }
    

    @XStreamAlias("Objects")
    public class ParentResponseObject {
    
        @XStreamImplicit
        private final List <ResponseObject> responseObjects = new ArrayList<ResponseObject>();
    
        public ParentResponseObject() {
        }
    
        public List<ResponseObject> getResponseObjects() {
            return responseObjects;
        }
    }
    

    主要方法:

    XStream xStream = new XStream();
    xStream.processAnnotations(ParentResponseObject.class);
    ParentResponseObject parent = (ParentResponseObject)xStream.fromXML(file);
    for (ResponseObject o : parent.getResponseObjects()) {
        System.out.println(o.getType() + ":" + o.getValue());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多