1

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

ありがとうございました!

4

1 に答える 1