使用XSLT 2在线替换部分字符串

时间:2014-07-28 09:10:58

标签: java xml xslt soap

我有一个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

    请告知。

    谢谢,

  • 1 个答案:

    答案 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>