Изменение одного атрибута с помощью XSLT

что самое простое XSLT вы можете придумать, чтобы преобразовать значение первого, в этом случае только, с true to false?

2 ответов


трансформация:

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

производит нужный, правильный результат: изменение первого compilation ребенка system.web элемент (но мы знаем, что есть только один system.web элемент в файл config.

<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 atribute является modifird для false, по мере необходимости.


<xsl:attribute name="debug">false</xsl:attribute> внутри <compilation>? Или я неправильно понял вопрос?