我想要这样的东西:
<msxsl:script language="C#">
??? getNodes() { ... return ... }
</msxsl:script>
<xsl:for-each select="user:getNodes()">
...
</xsl:for-each>
我应该使用什么返回类型getNodes()
我应该在它的身体里放什么?
原则上,您需要使用 XPathNodeIterator 返回节点集(如 Samjudson 所说)。我认为您给出的示例是一个退化函数,因为您没有为其提供任何参数。然而,我认为看看你如何could凭空制造节点。
<msxsl:script language="C#">
XPathNodeIterator getNodes()
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml("<root><fld>val</fld><fld>val2</fld></root>");
return doc.CreateNavigator().Select("/root/fld");
}
</msxsl:script>
但是,通常您希望在函数中执行一些在 xslt 中无法实现的操作,例如根据某些条件过滤节点集。可以通过代码更好地实现或依赖于某些外部数据结构的标准。另一种选择是简化冗长的表达式(如下例所示)。然后您将一些参数传递给 getNodes 函数。为简单起见,我使用基于 XPath 的过滤,但它可以是任何内容:
<msxsl:script language="C#">
XPathNodeIterator getNodes(XPathNodeIterator NodesToFilter, string Criteria)
{
XPathNodeIterator x = NodesToFilter.Current.Select("SOMEVERYCOMPLEXPATH["+Criteria+"]");
return x;
}
</msxsl:script>
<xsl:for-each select="user:getNodes(values/val,'SomeCriteria')">
...
</xsl:for-each>
希望这有帮助,
波阿斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)