사용자 정의 기능을 반환하는 노드 세트를 선언하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/152822

  •  02-07-2019
  •  | 
  •  

문제

나는 다음과 같은 것을 원한다 :

<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를 시도 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top