В принципе вам нужно использовать XPathNodeIterator для возврата наборов узлов (как говорит Самджудсон). Я полагаю, что приведенный вами пример является вырожденной функцией, поскольку вы не предоставляете ей никаких параметров. Тем не менее, я думаю, что поучительно посмотреть, как вы могли бы изготовить узлы из воздуха.
<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>
Надеюсь, это поможет,
Боаз