Изменить один атрибут с помощью XSLT - PullRequest
7 голосов
/ 08 июня 2010

Какой простейший XSLT вы можете придумать для преобразования значения первого, в данном случае только, атрибута /configuration/system.web/compilation/@debug из true в false?

Ответы [ 2 ]

6 голосов
/ 08 июня 2010

Это преобразование :

<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 (но мы знаем, что в файл конфигурации.

<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, как требуется.

0 голосов
/ 08 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...