2008-09-30 71 views

回答

4

原則上你需要使用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> 

希望這有助於, 波阿斯

2

C#xslt msxml的快速谷歌顯示了以下頁面的鏈接,它提供了許多在Microsoft環境中擴展XSLT的示例。

http://msdn.microsoft.com/en-us/magazine/cc302079.aspx

具體的XSLT和.NET之間映射類型的部分給你正是你需要的信息:

W3C XPath的類型 - 等效.NET類(類型)

  • 字符串 - System.String
  • Boolean - System.Boolean
  • Number - System.Double
  • 結果樹片段 - System.Xml.XPath.XPathNavigator類
  • 節點集 - System.Xml.XPath.XPathNodeIterator

因此,在你的例子,我會嘗試XPathNodeLiterator。

+0

+1投票部分答案。 – Constantin 2008-09-30 18:50:24