XSLT新手,但在这里的帖子中学到了很多东西。但是,我陷入了一个问题。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有一个“IsImplemented”设置为true InstallChannel节点。通过“对应”我的意思是我正在寻找具有相同的ChannelId和父节点下相同的模型的ChannelInfo。请注意,具有相同ChannelId的通道可能具有不同的IsImplemented值,具体取决于它们所处的设备。
我一直在使用和key()函数来成功查找,但这种嵌套查找让我难堪。
感谢,
-Mat
谢谢。我认为你很接近。同样,诀窍是可能有多个ChannelInfo在不同的DeviceInfo下具有相同的ChannelId,并且它们不一定都具有相同的IsImplemented。我会更新示例来说明这一点。 – mek363 2012-04-02 19:13:31
没问题,相同的一般概念仍然适用,你只需要在树上开一个更高的点,并且你的xpath变得有点复杂。 (我更新了我的答案)。 – javram 2012-04-02 19:29:03
我认为现在的问题是,您的变量“channelId”将抓取第一个InstalledChannel,但可能会有多个。我试图保持我的例子简单。我会再次更新。谢谢。 – mek363 2012-04-02 21:02:33