我有这样的XML文件:
<comp ref="C2">
<value>100uF</value>
<footprint>Capacitors_SMD:c_elec_6.3x7.7</footprint>
<datasheet>EEEFK1V101XP</datasheet>
<fields>
<field name="Manufacturer">Panasonic</field>
<field name="Voltage">35V</field>
<field name="Symbol">EEEFK1V101XP</field>
</fields>
<libsource lib="device" part="CP"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>57B38AFC</tstamp>
</comp>
<comp ref="C1">
<value>100uF</value>
<footprint>Capacitors_SMD:c_elec_6.3x7.7</footprint>
<fields>
<field name="Voltage">25V</field>
<field name="Symbol">2345</field>
</fields>
<libsource lib="device" part="CP"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>57B492EF</tstamp>
</comp>
我想单独显示这些组件,因为它们不相似。
当我使用datasheet
节点时,它可以工作。
<xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(datasheet, '-', footprint, '-', value)" />
<xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(datasheet, '-', footprint, '-', value))[1]) = 1]">
<xsl:sort select="@ref" />
但我不知道为什么当我使用fields/field/@name="Symbol"
时它不起作用。
<xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(fields/field/@name='Symbol', '-', footprint, '-', value)" />
<xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(fields/field/@name='Symbol', '-', footprint, '-', value))[1]) = 1]">
<xsl:sort select="@ref" />
答案 0 :(得分:2)
而不是fields/field/@name='Symbol'
,而不是fields/field[@name='Symbol']
。方括号表示要应用于所选节点的条件。
例如......
<xsl:key name="partTypeByValueAndFootprint"
match="comp"
use="concat(fields/field[@name='Symbol'], '-', footprint, '-', value)" />