사용자 정의 기능을 반환하는 노드 세트를 선언하는 방법은 무엇입니까?
문제
나는 다음과 같은 것을 원한다 :
<msxsl:script language="C#">
??? getNodes() { ... return ... }
</msxsl:script>
<xsl:for-each select="user:getNodes()">
...
</xsl:for-each>
어떤 반품 유형을 사용해야합니까? getNodes()
그리고 몸에 무엇을 넣어야합니까?
해결책
원칙적으로 Samjudson이 말한 것처럼 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>
이것이 도움이되기를 희망합니다, Boaz
다른 팁
C# XSLT MSXML의 빠른 Google은 Microsoft 환경에서 XSLT를 확장하는 많은 예를 제공하는 다음 페이지에 대한 링크를 공개했습니다.
http://msdn.microsoft.com/en-us/magazine/cc302079.aspx
특히 XSLT와 .NET 간의 매핑 유형에 대한 섹션은 필요한 정보를 정확하게 제공합니다.
W3C XPath 유형 - 동등한 .NET 클래스 (유형)
- 문자열 -System.String
- 부울 - System.Boolean
- 번호 - System.Double
- 결과 트리 조각 -System.xml.xpath.xpathnavigator
- 노드 세트 -System.xml.xpath.xpathnodeiterator
그래서 당신의 예에서 나는 xpathnodeliterator를 시도 할 것입니다.