WSO2 ESB 在 xslt 中添加默认命名空间
WSO2 ESB adds default namespace in xslt
我正在使用 WSO2 ESB 4.8.1,我想使用 xslt 修改 soap 消息。
我的肥皂留言:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<name>STACK</name>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
我想将 "name" 元素更改为 "brand" 并像这样修改此消息:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<brand>STACK</brand>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns2="http://nis.ayss.com.tr/">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="name">
<brand>
<xsl:apply-templates select="@*|node()"/>
</brand>
</xsl:template>
</xsl:stylesheet>
我在 WSO2 ESB 中创建了一个 xslt 文件作为本地条目。但是它将默认命名空间添加为 xmlns="http://ws.apache.org/ns/synapse" 并将 xslt 更改为:
<xsl:template match="name">
<brand xmlns="http://ws.apache.org/ns/synapse">
<xsl:apply-templates select="@*|node()"/>
</brand>
</xsl:template>
所以我的结果肥皂消息是:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<brand xmlns="http://ws.apache.org/ns/synapse">STACK</brand>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
如何在 WSO2 ESB 中使用 XSLT 修改此元素名称而不添加名称空间?
在您的 XSL 本地条目中,将 "brand" 标记替换为 xsl:element
<xsl:template match="name">
<xsl:element name="brand">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
我正在使用 WSO2 ESB 4.8.1,我想使用 xslt 修改 soap 消息。
我的肥皂留言:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<name>STACK</name>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
我想将 "name" 元素更改为 "brand" 并像这样修改此消息:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<brand>STACK</brand>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns2="http://nis.ayss.com.tr/">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="name">
<brand>
<xsl:apply-templates select="@*|node()"/>
</brand>
</xsl:template>
</xsl:stylesheet>
我在 WSO2 ESB 中创建了一个 xslt 文件作为本地条目。但是它将默认命名空间添加为 xmlns="http://ws.apache.org/ns/synapse" 并将 xslt 更改为:
<xsl:template match="name">
<brand xmlns="http://ws.apache.org/ns/synapse">
<xsl:apply-templates select="@*|node()"/>
</brand>
</xsl:template>
所以我的结果肥皂消息是:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
<return>
<result>true</result>
<responseList>
<brand xmlns="http://ws.apache.org/ns/synapse">STACK</brand>
<number>001</number>
</responseList>
</return>
</ns2:getResponse>
</S:Body>
</S:Envelope>
如何在 WSO2 ESB 中使用 XSLT 修改此元素名称而不添加名称空间?
在您的 XSL 本地条目中,将 "brand" 标记替换为 xsl:element
<xsl:template match="name">
<xsl:element name="brand">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>