私はxsltの初心者であり、子要素の属性値の1つが特定の文字列と一致する場合、xmlファイルからノード全体を削除する必要があります。入力xmlファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<gpm xmlns="http://www.airbus.com/topcased/gPM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.airbus.com/topcased/gPM">
<version>1.2</version>
<version>1.2</version>
<filters>
<sheetFilter description=" " labelKey="Liste de distribution" hidden="false">
<userLogin>TO44452</userLogin>
<resultSummary>
<fieldResult name="DL_NAME"/>
<fieldResult name="DL_USERS"/>
<fieldResult name="$SHEET_STATE"/>
</resultSummary>
<scope>
<productScope name="$CURRENT_PRODUCT" includeSubProducts="false"/>
</scope>
<containers>
<sheetTypeRef name="DistributionList"/>
</containers>
</sheetFilter>
<sheetFilter .../>
....
</filters>
</gpm>
要素のname属性が特定の値と一致する場合は、ノード全体を削除する必要があります。
私が使用したxsltファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1"
xmlns="http://www.airbus.com/topcased/gPM"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gpmns="http://www.airbus.com/topcased/gPM"
exclude-result-prefixes="gpmns">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<!-- Delete extra blank lines -->
<xsl:strip-space elements="*"/>
<!-- template for any attribute node, copy -->
<xsl:template match="*|@*" name="copy_all">
<xsl:copy disable-output-escaping="yes">
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gpmns:sheetTypeRef[@name = 'DL']">
<xsl:apply-templates match="gpmns:sheetFilter"/>
</xsl:template>
</xsl:stylesheet>
私が得た変換は次のとおりです:
<?xml version="1.0" encoding="UTF-8"?>
<gpm xmlns="http://www.airbus.com/topcased/gPM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.airbus.com/topcased/gPM">
<version>1.2</version>
<filters>
<sheetFilter description=" " labelKey="Liste de distribution" hidden="false">
<userLogin>TO44452</userLogin>
<resultSummary>
<fieldResult name="DL_NAME"/>
<fieldResult name="DL_USERS"/>
<fieldResult name="$SHEET_STATE"/>
</resultSummary>
<scope>
<productScope name="$CURRENT_PRODUCT" includeSubProducts="false"/>
</scope>
<containers/>
</sheetFilter>
<sheetFilter ..... />
前もって感謝します..