使用 XSLT 转换将 XML 转换为 JSON 后,是否有任何方法可以删除根节点
Is there any way to remove root nodes after converting XML to JSON using XSLT transformation
我有一个要求,我必须将数据从 SAP 发送到 API。为此,我需要将 XML 转换为 JSON format.I 是 XSLT 的新手。我尝试使用 XSLT 转换将 XML 转换为 JSON。转换后,输出不应包含 Root 节点。还有一种方法可以将输出 JSON 转换为 x-www-form-urlencoded JSON。
输入数据:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_Sales xmlns:ns0="urn:SD:Sales">
<RequestData>
<DODate>2020-02-10</DODate>
<DONumber>1900200009</DONumber>
<OrderNumber>3900002600</OrderNumber>
</RequestData>
<RequestData>
<DODate>2020-02-11</DODate>
<DONumber>1900200010</DONumber>
<OrderNumber>3900002603</OrderNumber>
</RequestData>
<RequestData>
<DODate>2020-02-11</DODate>
<DONumber>1900200011</DONumber>
<OrderNumber>3900002604</OrderNumber>
</RequestData>
</ns0:MT_Sales>
我使用了以下 XSLT 编码:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">{
<xsl:apply-templates select="*"/>}
</xsl:template>
<!-- Object or Element Property-->
<xsl:template match="*">
"<xsl:value-of select="name()"/>" : <xsl:call-template name="Properties"/>
</xsl:template>
<!-- Array Element -->
<xsl:template match="*" mode="ArrayElement">
<xsl:call-template name="Properties"/>
</xsl:template>
<!-- Object Properties -->
<xsl:template name="Properties">
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
<xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when>
<xsl:otherwise>{
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
}</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
<!-- Attribute Property -->
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",
</xsl:template>
</xsl:stylesheet>
输出 我收到了:
{
"ns0:MT_SAP_SecondarySales" : { "RequestData" :[{
"DODate" : "2020-02-10",
"DONumber" : "1900200009",
"OrderNumber" : "3900002600"
},{
"DODate" : "2020-02-11",
"DONumber" : "1900200011",
"OrderNumber" : "3900002604"
}] }}
输出我需要:
{"RequestData":[{
"DODate" : "2020-02-10",
"DONumber" : "1900200009",
"OrderNumber" : "3900002600"
},{
"DODate" : "2020-02-11",
"DONumber" : "1900200011",
"OrderNumber" : "3900002604"
}] } ```
Help is much appreciated.
编写适合您的结构的特定样式表比改编通用样式表更容易:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/*">
<xsl:text>{"RequestData":[</xsl:text>
<xsl:for-each select="*">
<xsl:text>{ </xsl:text>
<xsl:for-each select="*">
<xsl:text>	"</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position()!=last()">,</xsl:if>
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:text>}</xsl:text>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
<xsl:text>]}</xsl:text>
</xsl:template>
</xsl:stylesheet>
所有空白字符(	
、
)当然是可选的。
我有一个要求,我必须将数据从 SAP 发送到 API。为此,我需要将 XML 转换为 JSON format.I 是 XSLT 的新手。我尝试使用 XSLT 转换将 XML 转换为 JSON。转换后,输出不应包含 Root 节点。还有一种方法可以将输出 JSON 转换为 x-www-form-urlencoded JSON。 输入数据:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_Sales xmlns:ns0="urn:SD:Sales">
<RequestData>
<DODate>2020-02-10</DODate>
<DONumber>1900200009</DONumber>
<OrderNumber>3900002600</OrderNumber>
</RequestData>
<RequestData>
<DODate>2020-02-11</DODate>
<DONumber>1900200010</DONumber>
<OrderNumber>3900002603</OrderNumber>
</RequestData>
<RequestData>
<DODate>2020-02-11</DODate>
<DONumber>1900200011</DONumber>
<OrderNumber>3900002604</OrderNumber>
</RequestData>
</ns0:MT_Sales>
我使用了以下 XSLT 编码:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">{
<xsl:apply-templates select="*"/>}
</xsl:template>
<!-- Object or Element Property-->
<xsl:template match="*">
"<xsl:value-of select="name()"/>" : <xsl:call-template name="Properties"/>
</xsl:template>
<!-- Array Element -->
<xsl:template match="*" mode="ArrayElement">
<xsl:call-template name="Properties"/>
</xsl:template>
<!-- Object Properties -->
<xsl:template name="Properties">
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
<xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when>
<xsl:otherwise>{
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
}</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
<!-- Attribute Property -->
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",
</xsl:template>
</xsl:stylesheet>
输出 我收到了:
{
"ns0:MT_SAP_SecondarySales" : { "RequestData" :[{
"DODate" : "2020-02-10",
"DONumber" : "1900200009",
"OrderNumber" : "3900002600"
},{
"DODate" : "2020-02-11",
"DONumber" : "1900200011",
"OrderNumber" : "3900002604"
}] }}
输出我需要:
{"RequestData":[{
"DODate" : "2020-02-10",
"DONumber" : "1900200009",
"OrderNumber" : "3900002600"
},{
"DODate" : "2020-02-11",
"DONumber" : "1900200011",
"OrderNumber" : "3900002604"
}] } ```
Help is much appreciated.
编写适合您的结构的特定样式表比改编通用样式表更容易:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/*">
<xsl:text>{"RequestData":[</xsl:text>
<xsl:for-each select="*">
<xsl:text>{ </xsl:text>
<xsl:for-each select="*">
<xsl:text>	"</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position()!=last()">,</xsl:if>
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:text>}</xsl:text>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
<xsl:text>]}</xsl:text>
</xsl:template>
</xsl:stylesheet>
所有空白字符(	
、
)当然是可选的。