在java中将XML转换为Map

时间:2016-01-07 02:35:18

标签: java xml xstream

<?xml version="1.0" encoding="utf-8" ?>
<yesone>
<doc>
    <doc_type>B</doc_type>
    <seq>2015121100007453</seq>
    <att_year>2015</att_year>
    <att_FrmMm>0</att_FrmMm>
    <att_ToMm>0</att_ToMm>
    <att_inqrMm>01,02,03,04,05,06,07,08,09,10,11,12</att_inqrMm>
</doc>
<form form_cd="D101Y">
    <man resid="6611201653606" name="dolch">
        <data dat_cd="D01" busnid="1168140432" trade_nm="gagag(sa)" acc_no="00001532">
            <start_dt>19940708</start_dt>
            <end_dt>99991231</end_dt>
            <com_cd>434</com_cd>
            <sum>1041000</sum>
        </data>
    </man>
</form>

<form form_cd="E102Y">
    <man resid="6611201653606" name="dolch">
        <data dat_cd="E01" busnid="1244661351" trade_nm="gwerqreqxd" acc_no="9601687930560">
            <com_cd>110</com_cd>
            <ann_tot_amt>1200000</ann_tot_amt>
            <tax_year_amt>0</tax_year_amt>
            <ddct_bs_ass_amt>1200000</ddct_bs_ass_amt>
        </data>
    </man>
</form>

<form form_cd="F102Y">
    <man resid="6611201653606" name="dolch">
        <data dat_cd="F01" busnid="6108155691" trade_nm="(asd)gagsgs" acc_no="21010625891874">
            <com_cd>150</com_cd>
            <pension_cd>12</pension_cd>
            <ann_tot_amt>8519160</ann_tot_amt>
            <tax_year_amt>0</tax_year_amt>
            <ddct_bs_ass_amt>8519160</ddct_bs_ass_amt>
        </data>
    </man>
</form>

</yesone>

如何将此XML转换为Java Map?

另外,请给我一个关于图书馆的建议,我需要这样做。

我想要的是什么,如下所示

DOC_TYPE = B,SEQ = 2015121100007453,att_year = 2015,att_FrmMm = 0,att_ToMm = 0,att_inqrMm = 01,02,03,04,05,06,07,08,09,10,11,12 .......................〜

3 个答案:

答案 0 :(得分:0)

杰克逊是一个很棒的图书馆。研究一些关于如何阅读XML的例子。

在objectmapper的readValue()方法中,只需指定Map.class作为结果类型,就应该支持它。

从这里开始https://fasterxml.github.io/jackson-databind/javadoc/2.5/com/fasterxml/jackson/databind/ObjectMapper.html

答案 1 :(得分:0)

使用Xstream,您可以在此处详细了解:http://x-stream.github.io/

请参阅How to convert XML to java.util.Map and vice versa

答案 2 :(得分:0)

Underscore-java库可以将xml转换为Map。我是该项目的维护者。 Live example.

import com.github.underscore.lodash.U;
import java.util.*;

public class Main {

  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
    Map<String, Object> map = (Map<String, Object>) U.fromXml(
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n" + 
    "<yesone>\r\n" + 
    "<doc>\r\n" + 
    "    <doc_type>B</doc_type>\r\n" + 
    "    <seq>2015121100007453</seq>\r\n" + 
    "    <att_year>2015</att_year>\r\n" + 
    "    <att_FrmMm>0</att_FrmMm>\r\n" + 
    "    <att_ToMm>0</att_ToMm>\r\n" + 
    "    <att_inqrMm>01,02,03,04,05,06,07,08,09,10,11,12</att_inqrMm>\r\n" + 
    "</doc>\r\n" + 
    "<form form_cd=\"D101Y\">\r\n" + 
    "    <man resid=\"6611201653606\" name=\"dolch\">\r\n" + 
    "        <data dat_cd=\"D01\" busnid=\"1168140432\" trade_nm=\"gagag(sa)\" acc_no=\"00001532\">\r\n" + 
    "            <start_dt>19940708</start_dt>\r\n" + 
    "            <end_dt>99991231</end_dt>\r\n" + 
    "            <com_cd>434</com_cd>\r\n" + 
    "            <sum>1041000</sum>\r\n" + 
    "        </data>\r\n" + 
    "    </man>\r\n" + 
    "</form>\r\n" + 
    "\r\n" + 
    "<form form_cd=\"E102Y\">\r\n" + 
    "    <man resid=\"6611201653606\" name=\"dolch\">\r\n" + 
    "        <data dat_cd=\"E01\" busnid=\"1244661351\" trade_nm=\"gwerqreqxd\" acc_no=\"9601687930560\">\r\n" + 
    "            <com_cd>110</com_cd>\r\n" + 
    "            <ann_tot_amt>1200000</ann_tot_amt>\r\n" + 
    "            <tax_year_amt>0</tax_year_amt>\r\n" + 
    "            <ddct_bs_ass_amt>1200000</ddct_bs_ass_amt>\r\n" + 
    "        </data>\r\n" + 
    "    </man>\r\n" + 
    "</form>\r\n" + 
    "\r\n" + 
    "<form form_cd=\"F102Y\">\r\n" + 
    "    <man resid=\"6611201653606\" name=\"dolch\">\r\n" + 
    "        <data dat_cd=\"F01\" busnid=\"6108155691\" trade_nm=\"(asd)gagsgs\" acc_no=\"21010625891874\">\r\n" + 
    "            <com_cd>150</com_cd>\r\n" + 
    "            <pension_cd>12</pension_cd>\r\n" + 
    "            <ann_tot_amt>8519160</ann_tot_amt>\r\n" + 
    "            <tax_year_amt>0</tax_year_amt>\r\n" + 
    "            <ddct_bs_ass_amt>8519160</ddct_bs_ass_amt>\r\n" + 
    "        </data>\r\n" + 
    "    </man>\r\n" + 
    "</form>\r\n" + 
    "\r\n" + 
    "</yesone>");

    System.out.println(map);
    // {yesone={doc={doc_type=B, seq=2015121100007453, att_year=2015, att_FrmMm=0, att_ToMm=0, ...
  }
}