json - XSLT:Json 到给定的 xml 格式
问题描述
问题:我有一个给定的 JSON 输出,需要将其转换为具有给定格式的 xml 以将其用于另一个输入。
JSON 文档: report.json
{
"Diagnostic Cycle" : "2019-02-13T08:19:44ZZ",
"01 Tester" : {
"01 Name" : "IPTester",
"02 Operating System" : "Linux",
"03 Node Name" : "tester15",
"04 Release Level" : "5.4.7",
"06 Machine" : "i686",
"07 Domain Name" : "(none)"
}
,
"02 Device Name" :
{
"SampleECU":
{
"01 Diagnostic" : "OK",
"02 CAN Id" : "(none)",
"02 DoIP Id" : "00FFh 124Ah 85B1h",
"03 VIN original" : "BZ7282399843",
"04 VIN current" : "ERROR 11",
"05 HW Part No" : "887895414",
"06 DTC Status 01" : 1,
"10 Hardware Year" : 2020,
"11 Hardware Week" : 08,
"12 Hardware Patch" : 0,
"20 Software Year" : 2020,
"21 Software Week" : 08,
"22 Software Patch" : 0,
"30 Bootware" : "ERROR 11"
}
}
XML 输出的外观:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="./My_Stylesheet.xsl"?>
<VehicleReport xsi:schemaLocation="http://www.w3.org/xsd/vdx30 VDX.3.2.1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VDXVersion="3.2.1" xmlns="http://www.w3.org/xsd/vdx30">
<ServiceTool>
<Name>IPTester</Name>
<Version>5.4.7</Version>
<UserID>tester15</UserID>
<ExecutionTime>2019-02-13T08:19:44ZZ</ExecutionTime>
</ServiceTool>
<VehicleInformation>
<IdentificationNumberValue>BZ7282399843</IdentificationNumberValue>
</VehicleInformation>
<ComponentList>
<Component>
<ECUShortName>SampleECU</ECUShortName>
<DiagnosticInfo>
<DiagnosticInfoValue>1</DiagnosticInfoValue>
</DiagnosticInfo>
<SWHWInformation>
<Software>
<Version>
<VersionValue>20/08/00</VersionValue>
</Version>
</Software>
<Hardware>
<PartNumber>
<PartNumberValue>887895414</PartNumberValue>
</PartNumber>
<Version>
<VersionValue>20/08/00</VersionValue>
</Version>
</Hardware>
</SWHWInformation>
</Component>
</ComponentList>
</VehicleReport>
我听说我应该使用 Saxon XSLT 处理器进行 XSLT 转换,但我不知道如何(没有 XSLT 经验)。
我能想到的两种方式:
- 首先使用 json-to-xml() 然后使用 XSLT 转换 xml
- 使用 JSON 值直接填充 XML(因为简单所以首选)
但我不知道如何做到这两点 - XSLT 教程将不胜感激。
解决方案
这两种方法都是可能的。Martin 向您说明了第一种方法(使用 json-doc() 或 parse-json() 将 JSON 转换为映射和数组,然后通过选择这些映射和数组来填充 XML 文档。另一种方法是转换为“通用”XML,然后使用模板规则转换通用 XML。
转换(无论是 XML 到 XML 还是 JSON 到 XML)通常要么是输入驱动的,要么是输出驱动的。在像您这样的示例中,输出的结构与输入的结构几乎没有关系,您需要输出驱动:也就是说,样式表将采用“通过从 /a/b/c 中获取 /a/b/c 来生成 XXX”的形式输入,然后通过从输入中获取 /p/q/r 来生成 YYY”。这是使用马丁提出的解决方案风格的一个强有力的指标。
另一种风格,您将 JSON 转换为通用 XML,然后将模板应用于通用 XML 以生成您的特定 XML,可能更适合“输入驱动”转换,它采用典型的形式“看看接下来会发生什么”输入,并根据您的发现在输出中生成 X 或 Y 或 Z”。
推荐阅读
- python - 手指宽度(计算机视觉)
- python - 如何做一个循环作为回报,以免重复scrapy.request?
- go - 即使在设置结构标签后也无法解析 TOML 文件
- performance - 在谷歌虚拟机上上传速度非常糟糕
- php - 如何在php中设置文件目录斜杠?
- python - 如何在 sqlalchemy 中为 oracle 更新查询移动 CTE
- ajax - 如何从数据表中提取数据
- fiware - PERSEO_NOTICES_PATH='/notices',PERSEO_RULES_PATH='/rules' 从 Cep 创建订阅 2 Orion 以及如何在 Orion 和 Cep 之间通知规则和订阅
- c++ - 如何使用模型矩阵在游戏循环中渲染帧?
- axon - Axon 事件处理程序和查询处理程序在 kotlin 中不能一起工作