将具有重复元素的复杂XML以相同的顺序转换为JSON

时间:2016-01-21 21:58:56

标签: java json xml

首先让我承认我是一个对Java知之甚少的初学者。我遇到了XML到JSON转换的问题。我需要隐藏的XML与在整个文档中重复的元素很复杂。并且元素出现的顺序也需要保留。 示例XML:

   <books>
     <book>
       <chapter>
         <number>i</number>
         <title>Introduction</title>
       </chapter>
       <volume>
         <title>this title contains <italic>markup</italic> tags</title>
         <part>
           <title>part may contain sections and nested parts</title>
           <section>
              <title>contains chapters</title>
              <chapter>
                <number>1.1.1</number>
                <title>first chapter</title>
              </chapter>
           </section>
         </part>
         <chapter>
           <number>x</number>
           <title>last chapter in volume</title>
         </chapter>
       </volume>
       <chapter>
          <number>xii</number>
          <title>last chapter in book</title>
       </chapter>
     </book>
    </books>

我正在尝试构建一个目录页面类型,我需要以JSON格式提供此信息。由于订单在这里很重要,我决定生成的JSON的结构应该是所有元素都转换为JSON中的类似结构。

预期的JSON:

    {
      "Book": [
        {
          "Type": "chapter",
          "Title": "Introduction",
          "Number": "i",
          "List": ""
        },
        {
          "Type": "volume",
          "Title": "this title contains <![CDATA[<span style='italic'>markup</span>]]> tags",
          "Number": "",
          "List": [
            {
              "Type": "part",
              "Title": "part may contain sections and nested parts",
              "Number":"",
              "List": [
                {
                  "Type":"section",
                  "Title":"contains chapters",
                  "Number":"",
                  "List":[
                    {
                      "Type":"chapter",
                      "Title":"first chapter",
                      "Number":"1.1.1",
                      "List":""
                    }
                  ]
                }
                ]
            },
            {
              "Type":"chapter",
              "Title":"last chapter in volume",
              "Number":"x",
              "List":""
            }
          ]
        },
        {
          "Type": "chapter",
          "Title": "last chapter in book",
          "Number": "xii",
          "List": ""
        }
      ]
    }    

我遇到的另外两个问题是使用大多数JSON库时发生的数据类型转换,例如&#39; org.json&#39;。最后一个要求是,如果元素内部有标记标记,如<italic>,那么它应该包含在CDATA中。

我尝试了像org.json XML.toJSONObject()这样的常用方法(正如预期的那样)没有做到这一点。接下来,我尝试将XML转换为POJO并使用JAXB将POJO转换为XML。但是,当XML被解组为对象时,结构丢失,这也被证明是无效的。我也尝试过Staxon但是生成的JSON虽然保留了原始结构,但并不有效。

除了使用XSLT之外,有没有办法进行这种转换?例如,当使用JAXB转换为POJO时,在解组时使用LinkedHashMaps是否可能会保持结构?

DOM / SAX是进行这种复杂转换的正确方法吗?我真的不想使用XSLT将XML转换为JSON,因为我已经面临很多问题。

0 个答案:

没有答案