将 xml 转换为 jsonx 格式
converting xml to jsonx format
我正在尝试将 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>
<xsl:template match="*[not(*) and not(@*)]">
或使用
<xsl:template match="*[not(*) and string-length(.) > 0]">
而不是您的字符串模板
<xsl:template match="*[not(*)]">
我正在尝试将 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>
<xsl:template match="*[not(*) and not(@*)]">
或使用
<xsl:template match="*[not(*) and string-length(.) > 0]">
而不是您的字符串模板
<xsl:template match="*[not(*)]">