次の XML があるとします。
<Zoo>
<Keepers>
<Keeper name="Joe" manager="Miles" />
<Keeper name="Bob" manager="Karen"/>
</Keepers>
<Animals>
<Animal type="tiger" keeper="Joe"/>
<Animal type="lion" keeper="Joe"/>
<Animal type="giraffe" keeper="Bob"/>
</Animals>
</Zoo>
基本的に、Keeper.name を変数として使用し、Keeper.name = Animal.keeper の一致する Animal ノードにテンプレートを適用します。
これは、apply-templates またはその他の種類の XSL 構文を使用して可能ですか?
私の例では、Miles が管理するすべての飼育係を削除し、Miles が管理する飼育係が保持するすべての動物ノードを削除したいので、空白のテンプレートを適用します。
これは私のsudo XSLですが、うまくいきません:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@manager='Miles']">
<xsl:apply-templates select="/Zoo/Animals/Animal[@keeper=current()/@name]"/>
<!-- apply a blank template to this Keeper -->
</xsl:template>
<xsl:template match="Animal">
<!-- apply a blank template to this Animal -->
</xsl:template>
私の希望する出力 XML は次のとおりです。
<Zoo>
<Keepers>
<Keeper name="Bob" manager="Karen"/>
</Keepers>
<Animals>
<Animal type="giraffe" keeper="Bob"/>
</Animals>
</Zoo>
ありがとうございました!