首先让我承认我是一个对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,因为我已经面临很多问题。