У меня есть WSDL, в котором я хотел бы переопределить местоположение мыльного адреса с помощью XSLT 2.0.
Например: <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 → xyz.company.com
чтобы стать abc.company.com
.
Но как я могу также заменить точку 2. → myapp
стать xyzapp
Пожалуйста, порекомендуйте.
Благодаря,
Вы можете просто вызвать replace
снова, как в
<xsl:template match="soap:address/@location">
<xsl:attribute name="location" select="replace(replace(., 'xyz\.company\.com', 'abc.company.com'), 'myapp', 'xyzapp')"/>
</xsl:template>