XSLT翻译web配置httpHandlers

时间:2013-02-01 18:26:47

标签: xslt iis web-config httphandler

由于IIS 7中的处理程序部分已移至另一部分,因此我希望在TFS构建过程中自动移动这些部分。 在那种情况下,我可以同时服务于IIS 6.5和7.x环境。

我想通过使用XSLT来执行以下操作:

<configuration>
   <system.web>
      <httpHandlers>
            <add verb="*" path="*.New" type="MyHandler.New,MyHandler"/>
            <add verb="GET,HEAD" path="*.MyNewFileExtension" type="MyHandler.MNFEHandler,MyHandler.dll"/>
     </httpHandlers>
   <system.web>
</configuration>

必须翻译为:

<configuration>
    <system.web>
    </system.web>
    <system.webServer>
        <handlers>
            <add name="handler 1" verb="*" path="*.New" type="MyHandler.New,MyHandler"/>
            <add name="handler 2" verb="GET,HEAD" path="*.MyNewFileExtension" type="MyHandler.MNFEHandler,MyHandler.dll"/>
        </handlers>
   <system.webServer>
</configuration>

任何人都可以通过制作XSLT来帮助我,或者指出我正确的方向吗? (另请注意:第二个xml中的额外atrribute [name])

我知道如何轻松翻译,但在de xml中移动节点集合更难。 感谢。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="system.web">
    <system.web>
      <xsl:text>&#xA;</xsl:text>
    </system.web>
    <system.webServer>
      <handlers>
        <xsl:apply-templates select="httpHandlers/*" />
      </handlers>
    </system.webServer>
  </xsl:template>

  <xsl:template match="system.web/httpHandlers/*">
    <xsl:copy>
      <xsl:attribute name="name">
        <xsl:value-of select="concat('handler ', position())"/>
      </xsl:attribute>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

在您的示例输入上运行时(在关闭<system.web>上缺少斜杠之后),这会产生:

<configuration>
  <system.web>
  </system.web>
  <system.webServer>
    <handlers>
      <add name="handler 1" verb="*" path="*.New" type="MyHandler.New,MyHandler" />
      <add name="handler 2" verb="GET,HEAD" path="*.MyNewFileExtension" type="MyHandler.MNFEHandler,MyHandler.dll" />
    </handlers>
  </system.webServer>
</configuration>

<xsl:text>&#xA;</xsl:text>可能不是必需的,但是您的示例在输出中的单独行上有开始和结束<system.web>,因此我添加了它以确保它们不会合并为单个短标签( <system.web />)。