如何将给定的xml转换为目标xml,如下所示。我尝试在 xlst 中实现这一点,但它将命名空间添加到"信封"而不是"服务响应">
源 xml -
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServiceResponse xmlns="http://www.scym.com/abcd/dmb/Service/v1">
<RelatedCFR>
<NUMBER>481511</NUMBER>
<CATEGORY>TECHNICAL/BUSINESS APPROVAL</CATEGORY>
<CURRENT_PHASE>CFR PIR/A</CURRENT_PHASE>
<BRIEF_DESCRIPTION>Description Here</BRIEF_DESCRIPTION>
</RelatedCFR>
</ServiceResponse>
</soap:Body>
</soap:Envelope>
需要按如下方式转换 -
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:ServiceResponse xmlns:ns2="http://www.scym.com/abcd/dmb/Service/v1">
<RelatedCFR>
<NUMBER>481511</NUMBER>
<CATEGORY>TECHNICAL/BUSINESS APPROVAL</CATEGORY>
<CURRENT_PHASE>CFR PIR/A</CURRENT_PHASE>
<BRIEF_DESCRIPTION>Description Here</BRIEF_DESCRIPTION>
</RelatedCFR>
</ns2:ServiceResponse>
</soap:Body>
</soap:Envelope>
我在下面尝试了 xlst 它不起作用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|text()|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ServiceResponse">
<ns2:ServiceResponse xmlns:ns2="http://www.scym.com/abcd/dmb/Service/v1">
<xsl:apply-templates select="@*|node()"/>
</ns2:ServiceResponse>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://www.scym.com/abcd/dmb/Service/v1">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
首先,这不是"添加命名空间",而是更改元素的名称。例如,您要将CATEGORY
元素的名称从 Q{http://www.scym.com/abcd/dmb/Service/v1}CATEGORY
更改为 Q{}CATEGORY
。
(我在这里使用的是 XPath 3.0 中的符号Q{namespace}local-part
(。
实际上,您似乎已经掌握了您正在以编写match='*'
模板规则的方式更改名称,但是当您所需的 XML 输出指示元素(如 CATEGORY
(不应位于命名空间中时,您正在将元素(如 (的名称更改为位于命名空间中http://www.scym.com/abcd/dmb/Service/v1
。
包含 match="/ServiceResponse"
的模板规则将仅匹配 ServiceResponse 元素,该元素是 (a( 文档的最外层元素,以及 (b( 无命名空间。要匹配示例输入中的ServiceResponse
,请使用
match="x:ServiceResponse" xmlns:x="http://www.scym.com/abcd/dmb/Service/v1"