XSLT - 将命名空间添加到节点 XML
XSLT - Add namespace to node XML
我有一个简单的 XML
:
<RequestResponse>
<RequestResult>
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
</RequestResult>
</RequestResponse>
我使用 XSLT
将 FinalResponse 包含到 CDATA
(字符串)中:
<RequestResponse>
<RequestResult>
<![CDATA[<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>]]>
</RequestResult>
</RequestResponse>
然后我使用另一个 XSLT
more 将 XML
转换为 SOAP
以及我想要的命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse>
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
我需要将此 tag/namespace: xmlns="http://tempuri.org/"
添加到 RequestResponse
节点,但 仅 该节点如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse xmlns="http://tempuri.org/">
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
如何才能将该元素仅添加到该节点?
XSLT 样式表(http://xsltransform.net/bwdws2)
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output cdata-section-elements="RequestResult" xmlns="http://tempuri.org/"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RequestResponse | RequestResponse//*">
<xsl:element name="{name()}" namespace="http://tempuri.org/">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:transform>
变换
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse>
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
进入
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse xmlns="http://tempuri.org/">
<RequestResult><![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]></RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
我有一个简单的 XML
:
<RequestResponse>
<RequestResult>
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
</RequestResult>
</RequestResponse>
我使用 XSLT
将 FinalResponse 包含到 CDATA
(字符串)中:
<RequestResponse>
<RequestResult>
<![CDATA[<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>]]>
</RequestResult>
</RequestResponse>
然后我使用另一个 XSLT
more 将 XML
转换为 SOAP
以及我想要的命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse>
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
我需要将此 tag/namespace: xmlns="http://tempuri.org/"
添加到 RequestResponse
节点,但 仅 该节点如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse xmlns="http://tempuri.org/">
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
如何才能将该元素仅添加到该节点?
XSLT 样式表(http://xsltransform.net/bwdws2)
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output cdata-section-elements="RequestResult" xmlns="http://tempuri.org/"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RequestResponse | RequestResponse//*">
<xsl:element name="{name()}" namespace="http://tempuri.org/">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:transform>
变换
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse>
<RequestResult>
<![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]>
</RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>
进入
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<RequestResponse xmlns="http://tempuri.org/">
<RequestResult><![CDATA[
<FinalResponse>
<Message>Request inserted successfully.</Message>
<Response>true</Response>
</FinalResponse>
]]></RequestResult>
</RequestResponse>
</s:Body>
</s:Envelope>