【问题标题】:Convert XML to Map in java在 java 中将 XML 转换为 Map
【发布时间】:2016-04-11 07:57:15
【问题描述】:
<?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 地图?

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

以及我想要的,如下所示

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 ........................~

【问题讨论】:

  • 阅读How to Ask,这不是免费的编码服务,首先你展示你的努力,然后我们可以提供帮助。网上有很多教程,google一下“java parsing xml”就可以找到一些。

标签: java xml xstream


【解决方案1】:

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

import com.github.underscore.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, ...
  }
}

【讨论】:

    【解决方案2】:

    使用 Xstream,您可以在此处阅读更多信息:http://x-stream.github.io/

    How to convert XML to java.util.Map and vice versa

    【讨论】:

    • 但是,问题正在发生 import com.thoughtworks.xstream.XStream;导入 com.thoughtworks.xstream.io.xml.DomDriver; XStream xStream = new XStream(new DomDriver());地图 map2 = (地图) xStream.fromXML(xmlfile); System.out.println(map2);这就是问题所在
    【解决方案3】:

    jackson 是一个很好的库。研究一些关于如何读取 XML 的示例。

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2018-07-28
      • 2017-09-23
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多