我想要这样的东西:
<msxsl:script language="C#">
??? getNodes() { ... return ... }
</msxsl:script>
<xsl:for-each select="user:getNodes()">
...
</xsl:for-each>我应该为getNodes()使用什么返回类型,我应该在它的主体中放什么?
发布于 2009-01-05 18:16:51
原则上,您需要使用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>希望这能帮上忙,波阿斯
发布于 2008-09-30 14:02:25
快速google following显示了指向以下页面的链接,该页面提供了许多在C#环境中扩展xslt的示例。
http://msdn.microsoft.com/en-us/magazine/cc302079.aspx
具体地说,关于.Net和XSLT之间的映射类型一节给出了您所需要的信息:
W3C XPath类型-等效的.NET类(类型)
树片段字符串- System.String
因此,在您的示例中,我将尝试使用XPathNodeLiterator。
https://stackoverflow.com/questions/152822
复制相似问题