Заменить части строки в строке, используя XSLT 2

1

У меня есть 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

Пожалуйста, порекомендуйте.

Благодаря,

Теги:
xslt
soap

1 ответ

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>
  • 0
    Спасибо, это работает! Я пробовал мульти заменить раньше, но это не сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню