私は困惑しています。次のような xml ドキュメントがあるとします。
<Frag>
<DirRef Id="BeemzDir">
<Com Id="BEED24F05AB78FB588F61D4092654B6D" Guid="{A11AB356-2F45-4157-92EF-ED49F5BE0F70}">
<FileName Id="fil1" KeyPath="yes" Source="My.Exe" />
</Com>
<Com Id="FFF24F05AB78FB588F61D4092654CCC" Guid="{A11AB356-2F45-4157-92EF-ED49F5BE0F70}">
<FileName Id="fil2" KeyPath="yes" Source="My.Dll" />
</Com>
</DirRef>
</Frag>
<Frag>
<ComGroup Id="MyGroup">
<CompRef Id="BEED24F05AB78FB588F61D4092654B6D" />
<CompRef Id="FFF24F05AB78FB588F61D4092654CCC" />
</ComGroup>
</Frag>
Source="My.Exe" を格納する要素を削除するには、xslt を使用する必要があります。この場合、属性 id=BEED24F05AB78FB588F61D4092654B6D の要素「Com」を削除します。
私はそれをしました。しかし、私ができないことは、Id=BEED24F05AB78FB588F61D4092654B6D の「CompRef」要素も削除することです。
したがって、変換後、xml は次のようになります。
<Frag>
<DirRef Id="BeemzDir">
<Com Id="FFF24F05AB78FB588F61D4092654CCC" Guid="{A11AB356-2F45-4157-92EF-ED49F5BE0F70}">
<FileName Id="fil2" KeyPath="yes" Source="My.Dll" />
</Com>
</DirRef>
</Frag>
<Frag>
<ComGroup Id="MyGroup">
<CompRef Id="FFF24F05AB78FB588F61D4092654CCC" />
</ComGroup>
</Frag>
どんな助けでも大歓迎です。
アップデート
「FileName」要素を削除する xml を次に示します。
<xsl:template match="Com/FileName[contains(@Source,'My.Exe')='true']">
</xsl:template>
その結果、次のようになります。
<Frag>
<DirRef Id="BeemzDir">
<Com Id="BEED24F05AB78FB588F61D4092654B6D" Guid="{A11AB356-2F45-4157-92EF-ED49F5BE0F70}">
</Com>
<Com Id="FFF24F05AB78FB588F61D4092654CCC" Guid="{A11AB356-2F45-4157-92EF-ED49F5BE0F70}">
<FileName Id="fil2" KeyPath="yes" Source="My.Dll" />
</Com>
</DirRef>
</Frag>
<Frag>
<ComGroup Id="MyGroup">
<CompRef Id="BEED24F05AB78FB588F61D4092654B6D" />
<CompRef Id="FFF24F05AB78FB588F61D4092654CCC" />
</ComGroup>
</Frag>
xsl:apply-template を呼び出す上記の xsl を変更しても、動作しているノードにスタックしているため、何も起こりません。削除したい Id を保存してループする方法がわかりません。
更新 2
削除するノードが複数ある場合があります。つまり、source="MyExe" である複数の "Com" 要素です。また、ID は自動生成されるため、これが実行されるたびに異なります。