题
我想事情是这样的:
<msxsl:script language="C#">
??? getNodes() { ... return ... }
</msxsl:script>
<xsl:for-each select="user:getNodes()">
...
</xsl:for-each>
什么样的回报类型的我应该使用 getNodes()
和我应该怎么把它的身体吗?
解决方案
原则上,您需要使用XPathNodeIterator来返回节点集(如Samjudson所说)。我认为你给出的例子是一个退化函数,因为你不提供任何参数。但是,我认为看看你如何凭空捏造节点是有益的。
<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>
希望这有帮助, 波阿斯
其他提示
一个快速的谷歌C#xslt可以尝试下列任透露了一个链接到下面的网页,其中提供了许多例子中的延伸的XSLT在微软环境。
http://msdn.microsoft.com/en-us/magazine/cc302079.aspx
具体而言部分映类型之间的XSLT。净给你正是你所需要的信息:
W3C XPath类型等同的。净类别(类型)
- 串系统。字符串
- 布尔-系统。布尔
- 数系统。双
- 结果树片段的系统。Xml。XPath。XPathNavigator
- 节点集系统。Xml。XPath。XPathNodeIterator
所以在你的例子,我会尝试XPathNodeLiterator.
不隶属于 StackOverflow