如何将xml数据存储到arraylist java中

时间:2014-03-10 12:46:12

标签: java xml xml-parsing jaxb

我有一个包含数据的xml文件(不是完整的xml文件)

<header>    
   <ParameterContext>
       <Parameter>
          <Name>FILEID<Name>                        
           <Value>1001445<Value>
       </Parameter>
       <Identifier>Id</Identifier>
    </ParameterContext>
    <ParameterContext>
         <Parameter>
         <Name>product</Name>
         <Value>ECT</ns0:Value>
     </Parameter>
     <Identifier>ProductName</Identifier>
     </ParameterContext>            
    </header>

请帮我将这个xml数据(parametercontext元素的数据)存储到arraylist中。

很抱歉没有提前发布。 我有2个类对象并加载

public class object{
   private ArrayList<ParameterContext> parameterCtx = new ArrayList<ParameterContext>();
     public ArrayList<ParameterContext> getParameterCtx() {
    return parameterCtx;
}
   public void setParameterCtx(ParameterContext parameterCtx) {
    this.parameterCtx.add(parameterCtx) ;
}
  public Parameter searchParameter(String name, String identifier,                       ArrayList<ParameterContext> al) {

  for(int i = 0; i < al.size(); i++) {
        if(al.get(i).getIdentifier().equalsIgnoreCase(identifier)) {
            for(int j = 0; j < al.get(i).getParameter().size(); j++) {
                if(al.get(i).getParameter().get(j).getName().equalsIgnoreCase(name) ) {
                    return al.get(i).getParameter().get(j);
                }
            }
        }
    }

    return null ;
}

}

 public class load{
   @XmlElement(name = "ParameterContext")
protected List<load.ParameterContext> parameterContext;
  public List<load.ParameterContext> getParameterContext() {
    if (parameterContext == null) {
        parameterContext = new ArrayList<load.ParameterContext>();
    }
    return this.parameterContext;
}
  @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "parameter",
    "identifier"
})
public static class ParameterContext {

    @XmlElement(name = "Parameter", required = true)
    protected List<load.ParameterContext.Parameter> parameter;
    @XmlElement(name = "Identifier", required = true)
    protected String identifier;
   public List<load.ParameterContext.Parameter> getParameter() {
        if (parameter == null) {
            parameter = new ArrayList<load.ParameterContext.Parameter>();
        }
        return this.parameter;
     }
      public String getIdentifier() {
        return identifier;
    }
 public void setIdentifier(String value) {
        this.identifier = value;
 }
 @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "name",
        "value"
    })
    public static class Parameter {

        @XmlElement(name = "Name", required = true)
        protected String name;
        @XmlElement(name = "Value", required = true)
        protected String value;
     public String getName() {
            return name;
        }
       public void setName(String value) {
            this.name = value;
        }
        public String getValue() {
            return value;
        } 
      public void setValue(String value) {
            this.value = value;
        }

当我使用object.searchparameter(&#34; FIELD&#34;,&#34; ID&#34;,object.getParameterCtx())。getValue());

NULLPOINTEREXCEPTION即将到来。(getparameterCtx未初始化)。在此行之前我需要将其初始化。如何初始化?

2 个答案:

答案 0 :(得分:1)

使用JAXB,创建一个模仿XML的类

@XmlRootElement(name="header")
public class XMLBean {
   public List<ParameterContext> pc;

   public XMLBean() {

   }

   public List<ParameterContext> getPc() {
      return pc;
   }
   public void setPc(List<ParameterContext> pc) {
      this.pc = pc;
   }
}

public class ParameterContext {
      public Parameter parameter;
      public String identifier;

      public ParameterContext() {

      }
      public Parameter getParameter() {
          return pc;
      }
      public void setParameter(Parameter parameter) {
          this.param = param;
      }
      public String getIdentifier() {
          return identifer;
      }
      public void setIdentifier(String identifier) {
          this.identifier = identifier;
      }
}

public class Parameter {
   public String name;
   public String value;

   public Parameter() {

   }

   public void setName(String name) {
      this.name = name;
   }

   public void getName() {
      return name;
   }

   public void setValue(String value) {
      this.value = value;
   }

   public void getValue(String value) {
      return value;
   }
}

public static void main(String[] args) {
   InputStream is = YOURXML
   JAXBContext jaxb = JAXBContext.newInstace(XMLBean.class);
   Unmarshaller jaxbUnmarshaller = jaxb.createUnmarshaller();
   XMLBean xml = (XMLBean) jaxbUnmarshaller.unmarshal(is);

   System.out.println(xml.getParameterContext().get(0).getParam().getName());
   System.out.println(xml.getParameterContext().get(0).getParam().getValue());
}

类似的东西

答案 1 :(得分:0)

如果xml元素相同且重复使用getter / setters创建一个具有属性作为元素的对象。解析xml数据并将值存储在对象中。