如何对适配器中的输入请求执行 xslt 转换

Posted

技术标签:

【中文标题】如何对适配器中的输入请求执行 xslt 转换【英文标题】:how to perform xslt transformation for input request in adapter 【发布时间】:2014-11-17 13:25:24 【问题描述】:

我为WL.Server.invokeHttp 创建了一个XSLT,它以XML 格式从后端服务器获取数据并成功执行转换。此适配器用于从后端服务器获取数据。

但是在以 XML 格式向服务器发送数据时,由于我在适配器中以 JSON 格式获取数据,因此我需要使用 XSLT 将其转换为 XML。

ibm worklight 适配器中是否有任何规定可以让我对输入请求执行 XSLT 转换,就像我在从后端服务器获取响应时可以轻松完成它一样。

这里我解释的是返回数据(即响应)

例如,

如果我想为所有员工获取数据,我将调用一个适配器,即getEmpDetails,它以 XML 格式返回数据,但我不想显示从后端服务器返回的所有字段,所以我是使用 XSLT 过滤特定数据,我的移动应用程序以 JSON 格式使用它,所以我也在转换为 JSON 格式。

来自服务器的数据

<Employee>
    <EmpName>Jhon Methew</EmpName>
    <EmpId>1234</EmpId>
    <EmpDepartment>Accounts</EmpDepartment>
</Employee>
<Employee>
    <EmpName>James</EmpName>
    <EmpId>4434</EmpId>
    <EmpDepartment>Sales</EmpDepartment>        
</Employee>
<Employee>
    <EmpName>Anna</EmpName>
    <EmpId>3344</EmpId>
    <EmpDepartment>Business Development</EmpDepartment>
</Employee>

通过在适配器中分配 XSLT 进行转换后,我得到以下数据

"array":

      "employee":[

         "empname":"John Methew",
         "empdept":"Accounts"


       ,

         "empname":"Anna",
         "empdept":"Business Development"


       ],


现在,如果我想通过 createEmpadatper 添加新员工,那么我需要从移动设备传递 JSON 格式的输入请求以创建新员工,并且我的适配器需要将此请求转换为 XML(在这里,我想要一个 XSLT 过滤器,就像我在 getEmpDetails 适配器中的方式一样。

输入创建员工的请求

"employee":

             "empname":"Rahul",
             "empdept":"Softwares",
             "empid":"4233",
             "emppay":"20k"


           

适配器将接受响应并需要将上述 JSON 输入请求转换为 XML,所以我想问 worklight 中是否有任何规定可以转换传入请求?

<Employee>
        <EmpName>Rahul</EmpName>
        <EmpId>4233</EmpId>
        <EmpDepartment>Softwares</EmpDepartment>
        <EmpPayment>20K</EmpPayment>
</Employee>

【问题讨论】:

不熟悉 Worklight,但 XLST 通常不用于将 JSON 转换为 XML,反之亦然。使用理解 JSON 的工具或库怎么样? 好吧,我想将一些数据字段从 JSON 映射到 XML,这就是我使用它的原因,worklight 会自动为输出响应进行转换。 我被(开发人员)告知 - 不,Worklight 中没有这样的可用配置。 @Hunt,你能定义什么是“输入请求”吗?您能否详细说明您发送的内容以及您对两端(客户端和后端)的期望? @IdanAdar 我已经编辑了我的问题,你可以看看它 【参考方案1】:

XSLT 没有将 XML 转换为 JSON。 XSLT 将 XML 转换为另一个 XML,而不是 JSON。

一旦您的适配器从后端检索了 XML,WL 服务器基础架构就会自动将其转换为 JSON。如果您定义了 XSLT,从后端检索的原始 XML 将首先根据 XSLT 转换为新的 XML,然后新的 XML 将转换为 JSON。

没有开箱即用的 API 可以将 JSON 对象转换为 WL 适配器中的 XML 字符串。您可以在此处遵循两种不同的方法

    使用第 3 方 Java/javascript 库将 JSON 转换为 XML,例如https://code.google.com/p/x2js/ 或 http://www.json.org/java/。您可以阅读更多关于在适配器中使用 Java 的信息http://www.ibm.com/developerworks/mobile/worklight/getting-started.html,搜索“在适配器中使用 Java”

    手动创建您的 XML 模板并使用来自 JSON 的值填充它们。请参阅http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v620/04_02_HTTP_adapter_-_Communicating_with_HTTP_back-end_systems.pdf 的第 18 页以上。使用 myJsonObject.propertyName 将值注入 XML。

【讨论】:

不正确。 WL 或 MFP.server.Invoke(options):options 可以采用 xsl 文件的名称,该文件可用于将 xml/soap 响应解析为 json,只需在后面指定 样式表声明。然后由响应本身的 responseJSON 字段以 json 格式返回。阅读更多:ibm.com/support/knowledgecenter/en/SSHS8R_8.0.0/…

以上是关于如何对适配器中的输入请求执行 xslt 转换的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中链接 XSLT 处理器?

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?

设计模式-适配器模式

从适配器类获取不同活动中的 EditText 值

如何在 AsyncTask 的后执行方法中获取对 recyclerveiw 适配器进度条的引用

设计模式---适配器模式