您可以考虑将最简单的 XSLT 转换为/configuration/system.web/compilation/@debug
从true
到false
的第一个值,仅在这种情况下转换为{{1}}属性?
答案 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>
?或者我误解了这个问题?