XSLTには新機能が追加されましたが、ここでは多くのことを学んでいます。しかし、私は1つの問題に立ち往生しています。XSLTネストされた参照
私はXSLTを使用してデバイスインストールのレポートを作成しています。入力XMLは次のようになります。
<DeviceTypes>
<DeviceInfo Model="51473">
<Channels>
<ChannelInfo ChannelId="1" IsImplemented="false" SampRateHardware="448" />
<ChannelInfo ChannelId="2" IsImplemented="true" SampRateHardware="224" />
</Channels>
</DeviceInfo>
<DeviceInfo Model="51474">
<Channels>
<ChannelInfo ChannelId="1" IsImplemented="true" SampRateHardware="448" />
<ChannelInfo ChannelId="2" IsImplemented="true" SampRateHardware="224" />
</Channels>
</DeviceInfo>
</DeviceTypes>
<Installation>
<InstalledDevice Serial="597657" Model="51473">
<Channels>
<InstalledChannel ChannelId="1" Name="foo" />
<InstalledChannel ChannelId="2" Name="bar" />
</Channels>
</InstalledDevice>
</Installation>
私は唯一の対応ChannelInfoがtrueに設定された「IsImplemented」を持っている場合InstallChannelノードを処理したいです。 "対応する"とは、同じChannelIdと同じモデルを親ノードの下に持つChannelInfoを探しているということです。同一のChannelIdを持つチャネルは、そのデバイスがどのデバイスに属しているかによってIsImplementedの値が異なる場合があります。
正常に検索するためにkey()関数を使用していますが、このネストされた参照は私を困惑させます。
おかげで、
このような何かが動作するはず
ありがとうございます。私はあなたが近くだと思う。ここでもまた、異なるDeviceInfoの下に同じChannelIdを持つ複数のChannelInfoが存在し、必ずしもすべてが同じIsImplementedを持つとは限りません。これを説明するために例を更新します。 – mek363
問題はありませんが、同じ一般的な概念がそのまま適用されます。ツリーを少し上げてからxpathを少し複雑にするだけです。 (私は私の答えを更新しました)。 – javram
私はあなたの変数 "channelId"が最初のInstalledChannelを取得するという問題があると思いますが、複数の場合があります。私は私の例を単純にしているようにしていました。もう一度更新します。ありがとう。 – mek363