Изменение одного атрибута с помощью 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>
? Или я неправильно понял вопрос?