首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何声明返回node-set的自定义函数?

如何声明返回node-set的自定义函数?
EN

Stack Overflow用户
提问于 2008-09-30 12:29:57
回答 2查看 5.1K关注 0票数 4

我想要这样的东西:

代码语言:javascript
复制
<msxsl:script language="C#">
   ??? getNodes() { ... return ... }
</msxsl:script>

<xsl:for-each select="user:getNodes()">
    ...
</xsl:for-each>

我应该为getNodes()使用什么返回类型,我应该在它的主体中放什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-05 18:16:51

原则上,您需要使用XPathNodeIterator来返回节点集(正如Samjudson所说)。我认为你给出的例子是一个退化的函数,因为你没有给它提供任何参数。然而,我认为看看如何凭空制造节点是很有启发性的。

代码语言:javascript
复制
<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的过滤,但它可以是任何东西:

代码语言:javascript
复制
   <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>

希望这能帮上忙,波阿斯

票数 5
EN

Stack Overflow用户

发布于 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

  • Boolean - System.Boolean

  • Number - System.Double

  • Result
  • - System.Xml.XPath.XPathNavigator
  • Node Set - System.Xml.XPath.XPathNodeIterator

因此,在您的示例中,我将尝试使用XPathNodeLiterator。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/152822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档