使用XSLT更改单个属性

时间:2010-06-07 21:23:30

标签: xml xslt

                                                    

您可以考虑将最简单的 XSLT 转换为/configuration/system.web/compilation/@debugtruefalse的第一个值,仅在这种情况下转换为{{1}}属性?

2 个答案:

答案 0 :(得分:6)

此转化

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

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

 <xsl:template match="system.web/compilation[1]/@debug">
  <xsl:attribute name="debug">false</xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时:

<configuration>
    <system.web>
        <compilation debug="true" defaultLanguage="C#">
            <!-- this is a comment -->
        </compilation>

        <compilation debug="true" defaultLanguage="C#">
            <!-- this is another comment -->
        </compilation>
    </system.web>
</configuration>

生成所需的正确结果:修改任何debug元素的第一个compilation子元素的system.web属性(但我们知道只有配置文件中有一个system.web元素。

<configuration>
    <system.web>
        <compilation debug="false" defaultLanguage="C#">
            <!-- this is a comment -->
        </compilation>
        <compilation debug="true" defaultLanguage="C#">
            <!-- this is another comment -->
        </compilation>
    </system.web>
</configuration>

正如我们所见,只有第一个debug属性才会根据需要修改为false

答案 1 :(得分:-1)

<xsl:attribute name="debug">false</xsl:attribute>内的

<compilation>?或者我误解了这个问题?