将 XML 转换为 JSON 格式



我正在尝试将XML有效负载转换为jsonx格式。当输入XML具有属性时,我的代码不起作用,请您提供帮助。应用程序元素应该以 json:object 的形式出现,但它以 json:string 的形式出现 我可以知道如何将应用程序元素保留为 json:对象吗?

下面是我正在尝试的代码:我在下面用于代码测试

<?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>
<xsl:template match="*[not(*) and not(@*)]">

或使用

<xsl:template match="*[not(*) and string-length(.) &gt; 0]">

而不是您的字符串模板

<xsl:template match="*[not(*)]">

相关内容

  • 没有找到相关文章

最新更新