我有一个WSDL,我想在其中使用XSLT 2.0覆盖soap地址位置。
例如:
<soap:address location="https://xyz.company.com/portal/services/Service?param1=myapp&webService=TestWebService"/>
对于location属性,我想
xyz.company.com
成为abc.company.com
myapp
成为xyzapp
。
我写了以下xslt:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<xsl:output method="xml"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="vLocation" select="wsdl:definitions/wsdl:service/wsdl:port/soap:address/@location"/>
<xsl:template match="@location">
<xsl:attribute name="location">
<xsl:value-of select="replace($vLocation, xyz.company.com', 'abc.company.com')"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
这适用于替换第1点 - &gt; xyz.company.com
成为abc.company.com
。
但我怎样才能替换第2点。 - &gt; myapp
成为xyzapp
请告知。
谢谢,
答案 0 :(得分:1)
您可以像在
中一样再次致电replace
<xsl:template match="soap:address/@location">
<xsl:attribute name="location" select="replace(replace(., 'xyz\.company\.com', 'abc.company.com'), 'myapp', 'xyzapp')"/>
</xsl:template>