Я пишу приложение на C# с использованием .NET Framework 3.5 для реализации серии преобразований. Я использую класс XslCompiledTransform для выполнения преобразований. Я бы хотел, чтобы не писать кучу всех операторов в своих преобразованиях XSLT, поэтому я хотел бы выбрать некоторые данные на основе атрибута. Мои исходные данные выглядят следующим образом.Выбор элементов в XSLT на основе атрибутов с использованием .NET
<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») и не играл в кости.
Хороший вопрос, +1. См. Мой ответ для объяснения проблем и полного решения. :) –