0

我使用这些代码将我的方法隐藏在我的 XML(WSDL) 文件中:

    <xsl:template match="wsdl:operation[@name = 'GetCityWeatherByZIP']" />  
<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPSoapIn']" /> 
<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPSoapOut']" /> 

<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPHttpGetIn']" /> 
<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPHttpGetOut']" /> 

<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPHttpPostIn']" /> 
<xsl:template match="wsdl:message[@name = 'GetCityWeatherByZIPHttpPostOut']" /> 

<xsl:template match="s:element[@name = 'GetCityWeatherByZIP']" /> 
<xsl:template match="s:element[@name = 'GetCityWeatherByZIPResponse']" />

现在我只想使用一个条件来隐藏所有这些,而不是多个 if。实际上,我在我的 .xslt 文件中使用了这几行来隐藏我的方法从一个特殊的 IP 地址:

    <xsl:template match="wsdl:operation[@name = 'GetCityWeatherByZIP']">
   <xsl:variable name="rcaTrimmed" 
          select="substring-before(substring-after($remoteClientAddress, '/'), ':')" />
   <xsl:if test="not($rcaTrimmed = '192.168.3.74')">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()" />
      </xsl:copy>
   </xsl:if>
</xsl:template>

我想将我**<xsl:template match**的所有内容添加到一行中,然后将它们全部隐藏在一个特殊的 IP 地址中,我不想为我的所有方法一一编写这些代码。我怎样才能达到这个目的?


您是否只想隐藏@name以“GetCityWeatherByZIP”开头的所有内容?如果是这样,您可以只使用这个模板:

<xsl:template match="*[starts-with(@name, 'GetCityWeatherByZIP')]">
   <xsl:variable name="rcaTrimmed" 
          select="substring-before(substring-after($remoteClientAddress, '/'), ':')" />
   <xsl:if test="not($rcaTrimmed = '192.168.3.74')">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()" />
      </xsl:copy>
   </xsl:if>
</xsl:template>

我还建议将rcaTrimmed变量的定义移到模板之外,因此只需要计算一次:

<xsl:variable name="rcaTrimmed" 
          select="substring-before(substring-after($remoteClientAddress, '/'), ':')" />

<xsl:template match="*[starts-with(@name, 'GetCityWeatherByZIP')]">
   <xsl:if test="not($rcaTrimmed = '192.168.3.74')">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()" />
      </xsl:copy>
   </xsl:if>
</xsl:template>
4

1 回答 1

1

您是否只想隐藏@name以“GetCityWeatherByZIP”开头的所有内容?如果是这样,您可以只使用这个模板:

<xsl:template match="*[starts-with(@name, 'GetCityWeatherByZIP')]">
   <xsl:variable name="rcaTrimmed" 
          select="substring-before(substring-after($remoteClientAddress, '/'), ':')" />
   <xsl:if test="not($rcaTrimmed = '192.168.3.74')">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()" />
      </xsl:copy>
   </xsl:if>
</xsl:template>

我还建议将rcaTrimmed变量的定义移到模板之外,因此只需要计算一次:

<xsl:variable name="rcaTrimmed" 
          select="substring-before(substring-after($remoteClientAddress, '/'), ':')" />

<xsl:template match="*[starts-with(@name, 'GetCityWeatherByZIP')]">
   <xsl:if test="not($rcaTrimmed = '192.168.3.74')">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()" />
      </xsl:copy>
   </xsl:if>
</xsl:template>
于 2013-02-09T05:53:38.767 回答