jaxb解析xml

来源:互联网 发布:淘宝怎么更改实名认证 编辑:程序博客网 时间:2024/05/20 08:44

xml

<?xml version="1.0" encoding="UTF-8"?><MESSAGE>  <DATASET name="SBR_PORT_0001">    <DATA>      <ITEM key="U000001" val="ddd7ff6a-fbdc-449c-beb4-cc1bb9ad894c"/>      <ITEM key="U000002" val="XXX备案单位名称"/>      <ITEM key="U000003" val="XXX备案单位地址"/>      <ITEM key="U000004" val="010010"/>      <ITEM key="U000005" val="110000"/>      <ITEM key="U000006" val="01001413002"/>      <ITEM key="U000007" val="20141030"/>      <ITEM key="U000008" val="网络安全保卫局"/>      <ITEM key="U000009" val="20141030"/>      <ITEM key="U000010" val="张三"/>      <ITEM key="U000011" val="职务"/>      <ITEM key="U000012" val="0102356133"/>      <ITEM key="U000013" val="xxxxmail@qq.com"/>      <ITEM key="U000014" val="XXX责任部门"/>      <ITEM key="U000015" val="李四"/>      <ITEM key="U000016" val="职务"/>      <ITEM key="U000017" val="010355446645"/>      <ITEM key="U000018" val="testEmail@qq.com"/>      <ITEM key="U000019" val="13586456456"/>      <ITEM key="U000020" val="2"/>      <ITEM key="U000021" val=""/>      <ITEM key="U000022" val="3"/>      <ITEM key="U000023" val=""/>      <ITEM key="U000024" val="13"/>      <ITEM key="U000025" val=""/>    </DATA>  </DATASET>  <DATASET name="SBR_PORT_0002">    <DATA>      <ITEM key="S000001" val="249cb0b3-1f32-446a-ae59-2de14587865f"/>      <ITEM key="U000001" val="ddd7ff6a-fbdc-449c-beb4-cc1bb9ad894c"/>      <ITEM key="S000004" val="01001413002-00002"/>      <ITEM key="S000002" val="信息系统一"/>      <ITEM key="S000003" val="00002"/>      <ITEM key="S000005" val="2,4"/>      <ITEM key="S000006" val=""/>      <ITEM key="S000007" val="业务描述"/>      <ITEM key="S000008" val="10"/>      <ITEM key="S000009" val=""/>      <ITEM key="S000010" val=""/>      <ITEM key="S000011" val=""/>      <ITEM key="S000012" val="1"/>      <ITEM key="S000013" val=""/>      <ITEM key="S000014" val="1"/>      <ITEM key="S000015" val=""/>      <ITEM key="S000016" val="2"/>      <ITEM key="S000017" val=""/>      <ITEM key="S000018" val="1,2"/>      <ITEM key="S000019" val=""/>      <ITEM key="S000020" val=""/>      <ITEM key="S000021" val="2"/>      <ITEM key="S000022" val="2"/>      <ITEM key="S000023" val="2"/>      <ITEM key="S000024" val="2"/>      <ITEM key="S000025" val="2"/>      <ITEM key="S000026" val=""/>      <ITEM key="S000027" val="100"/>      <ITEM key="S000028" val="100"/>      <ITEM key="S000029" val="100"/>      <ITEM key="S000030" val="0"/>      <ITEM key="S000031" val="-1"/>      <ITEM key="S000032" val=""/>      <ITEM key="S000033" val=""/>      <ITEM key="S000034" val=""/>      <ITEM key="S000035" val=""/>      <ITEM key="S000036" val=""/>      <ITEM key="S000037" val="22.0"/>      <ITEM key="S000038" val=""/>      <ITEM key="S000039" val="1"/>      <ITEM key="S000040" val="1"/>      <ITEM key="S000041" val="1"/>      <ITEM key="S000042" val="1"/>      <ITEM key="S000043" val="1"/>      <ITEM key="S000044" val="1"/>      <ITEM key="S000045" val="1"/>      <ITEM key="S000046" val="0"/>      <ITEM key="S000047" val=""/>      <ITEM key="S000048" val="XXX其他服务"/>      <ITEM key="S000049" val="1"/>      <ITEM key="S000050" val="1"/>      <ITEM key="S000051" val="2"/>      <ITEM key="S000052" val="2"/>      <ITEM key="S000053" val="3"/>      <ITEM key="S000054" val="3"/>      <ITEM key="S000055" val=""/>      <ITEM key="S000056" val="XXX等级测评单位名称"/>      <ITEM key="S000057" val="20141009"/>      <ITEM key="S000058" val="1"/>      <ITEM key="S000059" val="XXX上级系统名称"/>      <ITEM key="S000060" val="XXX上级系统所属单位名称"/>      <ITEM key="S000061" val="43"/>      <ITEM key="S000062" val="3"/>      <ITEM key="S000063" val="43"/>      <ITEM key="S000064" val="3"/>      <ITEM key="S000065" val="3"/>      <ITEM key="S000066" val="20141016"/>      <ITEM key="S000067" val="1"/>      <ITEM key="S000068" val="1"/>      <ITEM key="S000069" val="XXX主管部门名称"/>      <ITEM key="S000070" val="0"/>      <ITEM key="S000071" val="XXX填表人"/>      <ITEM key="S000072" val="20141016"/>    </DATA>  </DATASET>  <DATASET name="SBR_PORT_0003">    <DATA>      <ITEM key="A000001" val="891326ed-9b9a-4cf1-ba08-bd5d2ff45e64"/>      <ITEM key="A000002" val="10"/>      <ITEM key="A000003" val="附件1.xlsx"/>      <ITEM key="A000004" val="REC_INFO_SYS_ACTH\50cd1dd4-6520-4ece-afe7-d1470acfc632.xlsx"/>      <ITEM key="S000001" val="249cb0b3-1f32-446a-ae59-2de14587865f"/>    </DATA>    <DATA>      <ITEM key="A000001" val="a0f3ea92-3c8e-46c2-8e04-e5a43f09ac74"/>      <ITEM key="A000002" val="11"/>      <ITEM key="A000003" val="附件2.xlsx"/>      <ITEM key="A000004" val="REC_INFO_SYS_ACTH\9b77287d-fe25-46aa-9fe3-6672b1f96b9a.xlsx"/>      <ITEM key="S000001" val="249cb0b3-1f32-446a-ae59-2de14587865f"/>    </DATA>    <DATA>      <ITEM key="A000001" val="c1cb1be3-909c-4b14-afd7-f2cbfaa9e392"/>      <ITEM key="A000002" val="12"/>      <ITEM key="A000003" val="附件3.docx"/>      <ITEM key="A000004" val="REC_INFO_SYS_ACTH\99dec929-a677-4b95-810b-db79cea3467a.docx"/>      <ITEM key="S000001" val="249cb0b3-1f32-446a-ae59-2de14587865f"/>    </DATA>    <DATA>      <ITEM key="A000001" val="ff22d75a-ba68-42a2-9a46-c0bd3506dc5b"/>      <ITEM key="A000002" val="15"/>      <ITEM key="A000003" val="附件4.xlsx"/>      <ITEM key="A000004" val="REC_INFO_SYS_ACTH\e0d76c40-249b-462d-8891-258a13d2f744.xlsx"/>      <ITEM key="S000001" val="249cb0b3-1f32-446a-ae59-2de14587865f"/>    </DATA>  </DATASET></MESSAGE>
import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.text.MessageFormat;import java.util.List;public class JaxbReadXml {  @SuppressWarnings("unchecked")  public static <T> T readString(Class<T> clazz, String context) throws JAXBException {    try {      JAXBContext jc = JAXBContext.newInstance(clazz);      Unmarshaller u = jc.createUnmarshaller();      return (T) u.unmarshal(new File(context));    } catch (JAXBException e) {      // logger.trace(e);      throw e;    }  }  @SuppressWarnings("unchecked")  public static <T> T readConfig(Class<T> clazz, String config, Object... arguments) throws IOException,    JAXBException {    InputStream is = null;    try {      if (arguments.length > 0) {        config = MessageFormat.format(config, arguments);      }      // logger.trace("read configFileName=" + config);      JAXBContext jc = JAXBContext.newInstance(clazz);      Unmarshaller u = jc.createUnmarshaller();      is = new FileInputStream(config);      return (T) u.unmarshal(is);    } catch (IOException e) {      // logger.trace(config, e);      throw e;    } catch (JAXBException e) {      // logger.trace(config, e);      throw e;    } finally {      if (is != null) {        is.close();      }    }  }  @SuppressWarnings("unchecked")  public static <T> T readConfigFromStream(Class<T> clazz, InputStream dataStream) throws JAXBException {    try {      JAXBContext jc = JAXBContext.newInstance(clazz);      Unmarshaller u = jc.createUnmarshaller();      return (T) u.unmarshal(dataStream);    } catch (JAXBException e) {      // logger.trace(e);      throw e;    }  }  public static void main(String[] args) throws JAXBException {    JaxDto jaxDto = JaxbReadXml.readString(JaxDto.class, "src/main/resources/message.xml");    List<DataSet> dataSetList = jaxDto.getDatasetsList();    DataSet dataSet1 =dataSetList.get(1);    DataSet dataSet2 = dataSetList.get(2);  }
import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import java.util.List;/** * Created by lcc on 2017/9/7. */@XmlRootElement(name = "MESSAGE")@XmlAccessorType(XmlAccessType.FIELD)public class JaxDto {  @XmlElement(name = "DATASET")  private List<DataSet> datasetsList;  public List<DataSet> getDatasetsList() {    return datasetsList;  }  public void setDatasetsList(List<DataSet> datasetsList) {    this.datasetsList = datasetsList;  }}
import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import java.util.List;@XmlAccessorType(XmlAccessType.FIELD)public class DataSet {  @XmlAttribute(name = "name")  private String name;  @XmlElement(name = "DATA")  private List<DATA> list;  public List<DATA> getList() {    return list;  }  public void setList(List<DATA> list) {    this.list = list;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }}
import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import java.util.List;/** * Created by lcc on 2017/9/7. */@XmlAccessorType(XmlAccessType.FIELD)public class DATA {  @XmlElement(name = "ITEM")  private List<ITEM>  itemList;  public List<ITEM> getItemList() {    return itemList;  }  public void setItemList(List<ITEM> itemList) {    this.itemList = itemList;  }}
/** * Created by lcc * on 2017/9/7. */@XmlAccessorType(XmlAccessType.FIELD)public class ITEM {  @XmlAttribute(name = "key")  private String key;  @XmlAttribute(name = "val")  private String val;  public String getVal() {    return val;  }  public void setVal(String val) {    this.val = val;  }  public String getKey() {    return key;  }  public void setKey(String key) {    this.key = key;  }}
import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.bind.annotation.adapters.XmlAdapter;import java.util.HashMap;import java.util.Map;public class MapAdapter extends XmlAdapter<Object, Map<String, String>> {  @Override  public Map<String, String> unmarshal(Object datas) throws Exception {    NodeList rowlist = ((Element) datas).getChildNodes();    int rowCount = rowlist.getLength();;    Map<String, String> itemMap = new HashMap<>();    for (int i = 0; i < rowCount; i++) {      Node detailNode = rowlist.item(i);      String key = detailNode.getAttributes().item(0).getNodeValue();      String value = detailNode.getAttributes().item(1).getNodeValue();      if (key == null || "".equals(key)) {        continue;      }      itemMap.put(key,value);    }    return itemMap;//    Map<String, String> map = new HashMap<String, String>();//    NodeList childNodes = ((Element) datas).getChildNodes();//    for(int x=0,size=childNodes.getLength(); x<size; x++) {//      Node childNode = childNodes.item(x);//      if(childNode.getNodeType() == Node.ELEMENT_NODE) {//        map.put(childNode.getLocalName(), childNode.getTextContent());//      }//    }//    return map;  }  @Override  public Object marshal(Map<String, String> v) throws Exception {    return null;  }}/** * MapEntity[] list = new MapEntity[map.size()]; * Set keyset = map.keySet(); * int index =0; * for(Iterator itor = keyset.iterator(); itor.hasNext();){ * MapEntity item = new MapEntity(); * item.key = itor.next(); * item.value = map.get(item.key); * list[index++] = item; * } * return list; * } * * @Override public Map unmarshal(MapEntity[] list) throws Exception { * <p> * Map map = new HashMap(); * for(int i=0;i<list.length;i++){ * MapEntity item = list[i]; * map.put(item.key, item.value); * } * <p> * return map; * <p> * } **/

这里遇到个问题 是想把一个data 下的所以的item 变成map但是自己实现的MapAdapter不行。个人感觉jaxb还是适合解析javabean。最后还是选择dom4j解析。

原创粉丝点击