![](/img/trans.png)
[英]What is better msxsl:node-set() or exsl:node-set() function?
[英]How to declare a user-defined function returning node-set?
我想要這樣的東西:
<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>
希望這有幫助,波阿斯
快速google for C#xslt msxml顯示了一個指向以下頁面的鏈接,該鏈接提供了許多在Microsoft環境中擴展XSLT的示例。
http://msdn.microsoft.com/en-us/magazine/cc302079.aspx
特別是XSLT和.Net之間的映射類型部分為您提供了所需的信息:
W3C XPath類型 - 等效的.NET類(類型)
所以在你的例子中我會嘗試XPathNodeLiterator。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.