【问题标题】:Transforming Java object to JSON via XSLT通过 XSLT 将 Java 对象转换为 JSON
【发布时间】:2014-01-30 16:57:19
【问题描述】:

我已经有了

  • 架构 A 的有效 JAXB 设置
  • 架构 B 的有效 JAXB 设置
  • 从 A 实例到 B 实例的 XSLT 转换(反之亦然)

如果我有一个 A 类型的 XML 实例,我可以使用 XSLT 和 Jettsion 生成 B 的合理 JSON 表示。但我真正想做的是采用 A 类型的 Java 对象,一个 JAXB 编组器,我现有的A->B XSLT 和一个 Jettsion XMLStreamWriter 来生成 B 类型的 JSON,而不必在两者之间生成 B(XML 或 Java)的实例。

Java Object A --> JAXB Marshaller --> ? --> XSLT A to B transfrom --> JSON B

我有一个想法,我应该能够通过编组到 SAXResult 来实现这一点,而 SAXResult 又充当可以提供 XSLT 翻译的 XMLReader。我需要一种可以协调编组和转换的 ContentHandlerAdapter。

但是我的头开始旋转了。

有没有人见过或写过这样的设置,希望能给我举个例子?

【问题讨论】:

    标签: java xml json xslt jaxb


    【解决方案1】:

    您可以将对象和Marshaller(或JAXBContext)的实例包装在JAXBSource 中并将其传递给Transformer

    【讨论】:

      【解决方案2】:

      这就是 trax TransformerHandler 接口的用途。

      TransformerFactory tf = TransformerFactory.newInstance();
      // or just use new net.sf.saxon.TransformerFactoryImpl() for Saxon (XSLT 2.0)
      
      Source xslt = new StreamSource(....);
      TransformerHandler handler =
          ((SAXTransformerFactory)tf).newTransformerHandler(xslt);
      Result result = new StAXResult(theJettisonStreamWriter);
      handler.setResult(result);
      
      SAXResult marshallerResult = new SAXResult(handler);
      // marshal to the marshallerResult as normal
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-30
        • 2012-08-29
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        相关资源
        最近更新 更多