我想使用XSLT将一些XML转换为JSON。XML如下所示:
<?xml version="1.0" ?>
<CoronaInfections>
<Countries>
<item>
<Country>Afghanistan</Country>
<CountryCode>AF</CountryCode>
<Slug>afghanistan</Slug>
<NewConfirmed>542</NewConfirmed>
<TotalConfirmed>21459</TotalConfirmed>
<NewDeaths>15</NewDeaths>
<TotalDeaths>384</TotalDeaths>
<NewRecovered>480</NewRecovered>
<TotalRecovered>2651</TotalRecovered>
<Date>2020-06-10T10:06:56Z</Date>
<Lat>33.0000</Lat>
<Lng>65.0000</Lng>
</item>
<item>
<Country>Albania</Country>
<CountryCode>AL</CountryCode>
<Slug>albania</Slug>
<NewConfirmed>36</NewConfirmed>
<TotalConfirmed>1299</TotalConfirmed>
<NewDeaths>0</NewDeaths>
<TotalDeaths>34</TotalDeaths>
<NewRecovered>15</NewRecovered>
<TotalRecovered>960</TotalRecovered>
<Date>2020-06-10T10:06:56Z</Date>
<Lat>41.0000</Lat>
<Lng>20.0000</Lng>
</item>
<item>
<Country>Algeria</Country>
<CountryCode>DZ</CountryCode>
<Slug>algeria</Slug>
<NewConfirmed>117</NewConfirmed>
<TotalConfirmed>10382</TotalConfirmed>
<NewDeaths>9</NewDeaths>
<TotalDeaths>724</TotalDeaths>
<NewRecovered>152</NewRecovered>
<TotalRecovered>6951</TotalRecovered>
<Date>2020-06-10T10:06:56Z</Date>
<Lat>28.0000</Lat>
<Lng>3.0000</Lng>
</item>
</Countries>
</CoronaInfections>
我希望JSON如下所示:
{ "type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"radius": 1.0841103742476927,
"id": "AF",
"countryName": "Afghanistan"
},
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [33.0000, 65.0000]
},
},
{
"type": "Feature",
"properties": {
"radius": 0.06562558255966042,
"id": "AL",
"countryName": "Albania"
},
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [41.0000, 20.0000]
},
},
]
}
推荐的方法是什么?
我已经有了一个方法,它看起来不太好,因为它只适用于xslt 1.0(我认为)和文本块。请参阅此处:https://xsltfiddle.liberty-development.net/naZYrpy/1
我更喜欢使用xslt 3.0和xml to json函数的更有效方法,但似乎不可能添加额外的json对象。
更多示例:1。不工作:https://xsltfiddle.liberty-development.net/pNmCzsA
不工作:https://xsltfiddle.liberty-development.net/ejivdGS/4
不工作:https://xsltfiddle.liberty-development.net/bFWR5DQ/17
提前感谢:-)
如果您想直接使用XPath 3.1创建XDM映射和数组,并将其序列化为JSON,请使用
<xsl:sequence
select="map { 'type' : 'FeatureCollection',
'Features' : array {
//item ! (
map {
'type' : 'Feature',
'properties' : map {
'radius' : TotalConfirmed div $max * 100,
'id' : data(CountryCode),
'countryName' : data(Country)
}
},
map {
'type' : 'Feature',
'geometry' : map {
'type' : 'Point',
'coordinates' : [number(Lat), number(Lng)]
}
}
)}
}"/>
https://xsltfiddle.liberty-development.net/a9HjZi
请注意,像Javascript对象这样的XDM映射没有任何有序的属性集合,因此您可以这样定义序列化顺序,Saxon 9和10的商业版本为此提供了扩展。
或者您需要将输入XML转换为XML格式,即XML to json函数exepcts,它将XML输入中元素的顺序表示为json序列化的输出顺序:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2005/xpath-functions"
exclude-result-prefixes="#all"
expand-text="yes"
version="3.0">
<xsl:output method="text"/>
<xsl:variable name="max" select="max(//item/*[starts-with(local-name(), 'TotalConfirmed')]/xs:integer(.))"/>
<xsl:template match="/">
<xsl:variable name="xml-to-json-input">
<map>
<string key="type">FeatureCollection</string>
<array key="features">
<xsl:apply-templates select="//item"/>
</array>
</map>
</xsl:variable>
<xsl:value-of select="xml-to-json($xml-to-json-input, map { 'indent' : true() })"/>
</xsl:template>
<xsl:template match="item">
<map>
<string key="type">Feature</string>
<map key="properties">
<number key="radius">{TotalConfirmed div $max * 100}</number>
<string key="id">{CountryCode}</string>
<string key="countryName">{Country}</string>
</map>
</map>
<map>
<string key="type">Feature</string>
<map key="geometry">
<string key="type">Point</string>
<array key="coordinates">
<number>{number(Lat)}</number>
<number>{number(Lng)}</number>
</array>
</map>
</map>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty-development.net/a9HjZi/2
我能够在Java中使用XSLT1.0,如以下示例所示:- copy.xml copy.xsl copy.java 输出
我用于处理和文件的一般java代码是: 我必须处理3.0版本的才能使用以下函数: parse-xml-fragment() 预期产出: 谁能提供一个解决方案吗?
XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输
问题内容: 我想使用xsl文件转换一些xml并以某种方式输出结果(我使用的是Android Api Level 8)。 我当前的活动看起来像这样,但是转换器保持为空。LogCat引发一个with ,表示xml格式不正确,但是我确定它是正确的。 我在LogCat中发现了一条提示,提示在上述错误消息之前。 我究竟做错了什么? 这是要转换的xml文件(source.xml) 这是对应的xsl(produ
问题内容: 您将如何从XML转换为JSON,然后再转换回XML? 以下工具可以很好地工作,但并不完全一致: xml2json 有人遇到过这种情况吗? 问题答案: 我认为这是最好的方法: 在XML和JSON之间转换 一定要阅读xml.com O’Reilly网站上的随附文章,该文章详细介绍了这些转换所带来的问题,我认为您会发现这很有启发性。O’Reilly托管该文章的事实应表明,Stefan的解决方
我想将XMl转换为另一种XMl格式。假设我在ats中有一个逻辑。埃姆沃。使改变TransformXml java文件如何集成以在camel上下文输入中转换tis(file:///d:/in)是xml文件,我想将其另存为xml。我已经将此文件作为bean类添加到camel