質問
このようなものが欲しい:
<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>
これは助けになりますが、 ボアズ
他のヒント
C#xslt msxmlのクイックgoogleは、Microsoft環境でXSLTを拡張する多くの例を提供する次のページへのリンクを明らかにしました。
http://msdn.microsoft.com/en-us/magazine /cc302079.aspx
具体的には、XSLTと.Net間のマッピングタイプに関するセクションでは、必要な情報を正確に提供しています。
W3C XPathタイプ-同等の.NETクラス(タイプ)
- String-System.String
- ブール-System.Boolean
- 数値-System.Double
- 結果ツリーのフラグメント-System.Xml.XPath.XPathNavigator
- ノードセット-System.Xml.XPath.XPathNodeIterator
したがって、あなたの例では、XPathNodeLiteratorを試してみます。
所属していません StackOverflow