我正在使用.NET Framework 3.5在C#中编写应用程序来实现一系列转换.我正在使用XslCompiledTransform类来执行转换.我想避免在我的XSLT转换中编写一堆for-each语句,所以我想根据属性选择一些数据.我的源数据如下所示.
<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>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下内容来尝试从无线电中引用"ACIMSCCInstance":
<xsl:value-of select="Radios/Radio/ACIMSCCInstance[@name=UHF1]"/>
Run Code Online (Sandbox Code Playgroud)
这不起作用但是请记住,"无线电"不是文档的根,我实际上处于相对路径应该工作的适当级别.只是为了确保我试过这个:
<xsl:value-of select="Radios/Radio/ACIMSCCInstance"/>
Run Code Online (Sandbox Code Playgroud)
这当然给了我列表中第一个无线电的"ACIMSCCInstance"值("1").
我的问题是,为什么路径末端的"[@ name = UHF1]"不能选择名为"UHF1"的收音机.我也试过这个"@ name ='UHF1']"而且没有骰子.
我正在使用以下内容来尝试从无线电中引用"ACIMSCCInstance":
Run Code Online (Sandbox Code Playgroud)<xsl:value-of select="Radios/Radio/ACIMSCCInstance[@name=UHF1]"/>但这不起作用
我的问题是,为什么路径末端的"[@ name = UHF1]"不能选择名为"UHF1"的收音机
XPath表达式:
Radios/Radio/ACIMSCCInstance[@name=UHF1]
Run Code Online (Sandbox Code Playgroud)
选择所有ACIMSCCInstance的元素name属性等于的孩子元素中的至少一个的字符串值ACIMSCCInstance的命名UHF1.此ACIMSCCInstance元素也必须是元素的子Radio元素,并且必须是Radios元素的子元素,并且它必须是当前节点的子元素.
这个表达中至少有两个严重的错误:
UHF1整个文档中没有任何命名的元素.您希望与字符串文字进行比较,'UHF1'XPath中的字符串文字必须用单引号或双引号括起来.
ACIMSCCInstance文档中没有元素具有name属性.您实际上希望为Radio元素完成此测试.
方案:
修复上面的两个问题为我们提供了以下正确的XPath表达式:
Radios/Radio[@name='UHF1']/ACIMSCCInstance
Run Code Online (Sandbox Code Playgroud)
建议:阅读一本关于XPath的好书对于获取使用XSLT所需的基本知识是必要的.