使用 XSLT 将 JSON 转换为 XML
Converting JSON to XML using XSLT
以下是我的要求:
应用程序 A 正在基于它的 Java Bean 创建一个 JSON 并发送到我的应用程序。
我必须将此 JSON 转换为 XML(XSD 因为这与我的 JSON 结构完全不同)并发送到应用程序 B.
解决方案 1) 我目前正在使用 Apache-xalan 使用 json.org library.Then 将此 json 转换为 xml 和XSL 样式表,我正在将其转换为应用程序 B 要求的 xml 格式。
解决方案 2) 将此 json 转换为 Java Bean (JB1)。然后将此 JB1 转换为另一个 Java Bean (JB2 ) 根据应用程序 B.Then 所需的 xml 结构,将 JB2 转换为应用程序 B 的 XML。
解决方案 3) 使用 Apache Xalan 和 Xerces 解析输入 json 并在 Java 本身中生成 XML 而无需使用XSL.
哪种方法更好(在代码简单性、吞吐量方面)?随着 JSON 变得越来越复杂,使用解决方案 1 是否容易?请建议是否有比这 3 个更好的方法?
JSON 很简单,"a communications protocol." 换句话说,"it specifically exists(!) to allow 'arbitrary (JavaScript) data structures' to be conveyed between some-client and some-host," 优于 "the HTTP(S) protocol."
因此:"it is not(!) XML," 因此绝不能被视为 "appropriate input to XSLT!"
"Thou shalt not mix Apples and Oranges!"
如果您希望将 "XSLT" 技术应用于 "JSON-derived" 输入 (根据定义,"a data structure ...") 那么您 必须先,然后"by whatever suitable means,"将该数据结构转换成XML.
有示例程序可以将 JSON 文档映射到等效的 XML 文档并返回;我写了一个作为 Liberty 对 json-p (javax.json) 支持的演示,使用了我称为 JinX 的 XML 词汇表(JSON in XML)。如果需要,它可以用作围绕 XSLT 的 pre/post 处理器。
可能有更好的解决方案——例如,重新定义 XSLT 以在 JSON 树上运行——但需要更多的工作。
解决方案一:是的。这是简单和复杂 JSON 以及简单或复杂目标 XML.
的常规最佳路径
解决方案 2: 不。没有理由将 Java Beans 作为中间形式引入,特别是如果您没有其他需要 Java Beans .此选项不必要地引入了转换和编组的复杂性。
解决方案 3: 否。Xalan 和 Xerces 都不是为解析而设计的 JSON;它们旨在解析 XML.
XSLT 3.0 提供了一个内置的 json-to-xml() 函数。获得 XML 后,您可以轻松地将其转换为所需的格式。它在 Saxon 9.7(PE 或更高版本)中实现,我相信 Exselt。
以下是我的要求:
应用程序 A 正在基于它的 Java Bean 创建一个 JSON 并发送到我的应用程序。 我必须将此 JSON 转换为 XML(XSD 因为这与我的 JSON 结构完全不同)并发送到应用程序 B.
解决方案 1) 我目前正在使用 Apache-xalan 使用 json.org library.Then 将此 json 转换为 xml 和XSL 样式表,我正在将其转换为应用程序 B 要求的 xml 格式。
解决方案 2) 将此 json 转换为 Java Bean (JB1)。然后将此 JB1 转换为另一个 Java Bean (JB2 ) 根据应用程序 B.Then 所需的 xml 结构,将 JB2 转换为应用程序 B 的 XML。
解决方案 3) 使用 Apache Xalan 和 Xerces 解析输入 json 并在 Java 本身中生成 XML 而无需使用XSL.
哪种方法更好(在代码简单性、吞吐量方面)?随着 JSON 变得越来越复杂,使用解决方案 1 是否容易?请建议是否有比这 3 个更好的方法?
JSON 很简单,"a communications protocol." 换句话说,"it specifically exists(!) to allow 'arbitrary (JavaScript) data structures' to be conveyed between some-client and some-host," 优于 "the HTTP(S) protocol."
因此:"it is not(!) XML," 因此绝不能被视为 "appropriate input to XSLT!"
"Thou shalt not mix Apples and Oranges!"
如果您希望将 "XSLT" 技术应用于 "JSON-derived" 输入 (根据定义,"a data structure ...") 那么您 必须先,然后"by whatever suitable means,"将该数据结构转换成XML.
有示例程序可以将 JSON 文档映射到等效的 XML 文档并返回;我写了一个作为 Liberty 对 json-p (javax.json) 支持的演示,使用了我称为 JinX 的 XML 词汇表(JSON in XML)。如果需要,它可以用作围绕 XSLT 的 pre/post 处理器。
可能有更好的解决方案——例如,重新定义 XSLT 以在 JSON 树上运行——但需要更多的工作。
解决方案一:是的。这是简单和复杂 JSON 以及简单或复杂目标 XML.
的常规最佳路径解决方案 2: 不。没有理由将 Java Beans 作为中间形式引入,特别是如果您没有其他需要 Java Beans .此选项不必要地引入了转换和编组的复杂性。
解决方案 3: 否。Xalan 和 Xerces 都不是为解析而设计的 JSON;它们旨在解析 XML.
XSLT 3.0 提供了一个内置的 json-to-xml() 函数。获得 XML 后,您可以轻松地将其转换为所需的格式。它在 Saxon 9.7(PE 或更高版本)中实现,我相信 Exselt。