我想选择具有值属性大于阈值的值属性的所有记录。我在$dataset
中的数据如下所示:
<component name="Information Technology" value="5712"/>
<component name="NADCO" value="5033"/>
<component name="Electronic Security" value="2104"/>
<component name="SATT" value="1608"/>
<component name="E-Business Office" value="291"/>
<component name="Systems Development" value="158"/>
<component name="Test" value="694"/>
我还有$threshold
,其值为4000
。我用来获取值大于4000的组件的代码是:
<xsl:variable name="records" select="$dataset/self::node()[@value > $threshold]"/>
所以我希望records
成为组件Information Technology
和NADCO
的列表,但变量为空。我哪里做错了?
ps请注意,我没有根节点
修改
制作数据集的代码如下
<xsl:variable name="dataset" select="$components/component" />
$components
是
<components>
<component name="Information Technology" value="5712"/>
<component name="NADCO" value="5033"/>
<component name="Electronic Security" value="2104"/>
<component name="SATT" value="1608"/>
<component name="E-Business Office" value="291"/>
<component name="Systems Development" value="158"/>
<component name="Test" value="694"/>
</components>
答案 0 :(得分:0)
我是通过以下方式做到的:
dataset
变量包含components/component
(component
标签的集合,正如您所做的那样)。
XPath 表达式为$dataset[@value > $threshold]
,即:
$dataset
- 变量(记录容器)。[@value > $threshold]
- 谓词。如您所见,甚至不需要self::node()
。
所以整个示例模板匹配main
(root)标记
(containig components
)如下所示:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:variable name="dataset" select="components/component"/>
<xsl:variable name="threshold" select="4000"/>
<xsl:variable name="records" select="$dataset[@value > $threshold]"/>
<xsl:copy-of select="$records"/>
</xsl:copy>
</xsl:template>
即使在版本1.0 / Xalan中也能正常工作。有关工作示例,请参阅http://xsltransform.net/nb9MWsz