代码之家  ›  专栏  ›  技术社区  ›  user496934

正在读取XML值以填充Java变量

  •  2
  • user496934  · 技术社区  · 12 年前

    我正在使用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 方法我可以读取Object Type的“Type”属性,但我如何读取44567789等标记中的值并将其填充到变量中 ResponseObject 价值

    1 回复  |  直到 12 年前
        1
  •  2
  •   dogbane    12 年前

    您需要使用 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());
    }