Я пишу приложение на C #, используя .NET Framework 3.5 для реализации серии преобразований. Я использую класс XslCompiledTransform для выполнения преобразований. Я хотел бы избежать записи нескольких операторов for-each в моих XSLT-преобразованиях, поэтому я бы хотел выбрать некоторые данные на основе атрибута. Мои исходные данные выглядят следующим образом.
<Radios>
<Radio name="UHF1">
<GUID protected="true">785A9539-918B-4DCE-A9AA-AC9D6275EA86</GUID>
<DigitalAudioDeviceInstance protected="true">1</DigitalAudioDeviceInstance>
<DigitalAudioDevicePort>2</DigitalAudioDevicePort>
<ACIMLocalInstance protected="true">1</ACIMLocalInstance>
<ACIMLocalPort>2</ACIMLocalPort>
<ACIMSCCInstance protected="true">1</ACIMSCCInstance>
</Radio>
<Radio name="VHF1">
<GUID protected="true">C150EA26-E53E-4366-B4A0-84BF619BFD3A</GUID>
<DigitalAudioDeviceInstance protected="true">2</DigitalAudioDeviceInstance>
<DigitalAudioDevicePort>2</DigitalAudioDevicePort>
<ACIMLocalInstance protected="true">2</ACIMLocalInstance>
<ACIMLocalPort>6</ACIMLocalPort>
<ACIMSCCInstance protected="true">2</ACIMSCCInstance>
</Radio>
</Radios>
Я пытаюсь сослаться на «ACIMSCCInstance» с радио, используя следующее:
<xsl:value-of select="Radios/Radio/ACIMSCCInstance[@name=UHF1]"/>
Это не работает, однако имейте в виду, что «Радио» НЕ является корнем документа, и я на самом деле на соответствующем уровне, где этот относительный путь должен работать. Просто чтобы убедиться, что я попробовал это:
<xsl:value-of select="Radios/Radio/ACIMSCCInstance"/>
Что, конечно, дает мне значение "ACIMSCCInstance" ("1") первого радио в списке.
Мой вопрос: почему «[@ name = UHF1]» в конце пути не работает при выборе радиоприемника с именем «UHF1». Я также попробовал это "@ name = 'UHF1']" и не играю в кости.