我正在尝试将XML有效负载转换为jsonx格式。输入XML具有属性时,我的代码不起作用,请您提供帮助。应用程序元素应该作为json:object出现,但它作为json:string出现 我可以知道如何将Applicaton元素保留为json:object吗?
以下是我正在尝试的代码: 我在下面用来进行代码测试
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv= "http://schemas.xmlsoap.org/soap/envelope/" xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" version="1.0">
<xsl:output indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[local-name()='Envelope']">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[local-name()='Body']">
<json:object name="Body">
<xsl:apply-templates/>
</json:object>
</xsl:template>
<!-- Array -->
<xsl:template match="*[*[2]][name(*[1]) = name(*[2])]">
<json:object name="{local-name()}">
<json:array name="{local-name(*[1])}">
<xsl:apply-templates/>
</json:array>
</json:object>
</xsl:template>
<!-- Array member -->
<xsl:template match="*[parent::*[ name(*[1])=name(*[2]) ]] | /">
<json:object>
<xsl:apply-templates/>
</json:object>
</xsl:template>
<!-- Object -->
<xsl:template match="*">
<json:object name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</json:object>
</xsl:template>
<!-- String -->
<xsl:template match="*[not(*)]">
<json:string name="{local-name()}">
<xsl:value-of select="."/>
<xsl:apply-templates select="@*"/>
</json:string>
</xsl:template>
<xsl:template match="@*">
<json:string name="{local-name()}">
<xsl:value-of select="."/>
</json:string>
</xsl:template>
</xsl:stylesheet>
输入XML:输入我正在使用的有效负载xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SendEmailResponse xmlns="http://webservices.abcd.com/">
<SendEmailResult>
<EmailSpecifications xmlns="">
<Status EmailID="0" Success="N">
<ErrorCode>1010</ErrorCode>
<ErrorDescription>Invalid AppID</ErrorDescription>
</Status>
<Application AppID="0" EntityID="0" />
</EmailSpecifications>
</SendEmailResult>
</SendEmailResponse>
</soap:Body>
</soap:Envelope>
输出jsonx我现在得到的内容:期望输出中的<json:object name="Application">
但得到<json:string name="Application">
<json:object
xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
<json:object name="Body">
<json:object name="SendEmailResponse">
<json:object name="SendEmailResult">
<json:object name="EmailSpecifications">
<json:object name="Status">
<json:string name="EmailID">0</json:string>
<json:string name="Success">N</json:string>
<json:string name="ErrorCode">1010</json:string>
<json:string name="ErrorDescription">Invalid AppID</json:string>
</json:object>
<json:string name="Application">
<json:string name="AppID">0</json:string>
<json:string name="EntityID">0</json:string>
</json:string>
</json:object>
</json:object>
</json:object>
</json:object>
</json:object>
预期的输出::需要在输出XML中将<json:string name="Application">
更改为<json:object name="Application">
<json:object
xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
<json:object name="Body">
<json:object name="SendEmailResponse">
<json:object name="SendEmailResult">
<json:object name="EmailSpecifications">
<json:object name="Status">
<json:string name="EmailID">0</json:string>
<json:string name="Success">N</json:string>
<json:string name="ErrorCode">1010</json:string>
<json:string name="ErrorDescription">Invalid AppID</json:string>
</json:object>
<json:object name="Application">
<json:string name="AppID">0</json:string>
<json:string name="EntityID">0</json:string>
</json:object>
</json:object>
</json:object>
</json:object>
</json:object>
</json:object>
答案 0 :(得分:1)
<xsl:template match="*[not(*) and not(@*)]">
或使用
<xsl:template match="*[not(*) and string-length(.) > 0]">
代替您的字符串模板
<xsl:template match="*[not(*)]">