2014-10-23 12 views
0

내가이 같은 XML 트리가 있다고 가정 :msxsl : script language = "JScript"- 프로세스 트리 조각?

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <item> 
     <val>10,1</val> 
    </item> 
    <item> 
     <val>20,2</val> 
    </item> 
    <item> 
     <val>30,3</val> 
    </item> 
</root> 

어떻게 msxsl 내부 트리 요소를 선택할 수의 JScript에 기록 된 스크립트 기능을? 이처럼 :

<msxsl:script language="JScript" implements-prefix="baator"> 
<![CDATA[ 
    function test(N) { 
     //processing result tree fragment N here, for example i need to convert //item/val to numbers and return a complicate f(N) 
    } 
]]> 
</msxsl:script> 
... 
<xsl:value-of select="baator:test(//item)" /> 

공식 문서에서는 C# 언어에 대한 예,하지만 JScript를 위해 아무도있다. 같은 클래스 이름을 사용하려고했지만 성공하지 못했습니다. 프로덕션 환경에서 이미 작성된 함수가 있으므로 JScript를 사용하는 것이 중요합니다. 감사합니다.

+0

같은 스크립트를 수 당신은 당신이 모두 MSXML으로 사용하는 환경에있는 XSLT 프로세서 우리에게 말할 필요가 너무로 표현된다 .NET Framework에서 XslCompiledTransform과 같은 COM 세계는 JScript의 확장 기능을 지원하지만 노드 집합이나 트리 조각의 개체 모델과 형식 매핑은 매우 다릅니다. 여러분이 제시 한 샘플을 사용하면 XSLT/XPath 사이트의'// item' 인자는'item' 엘리먼트의 노드 집합입니다. JScript 사이트의 클래스 또는 유형에 매핑하는 방법은 XSLT 프로세서에 따라 다르므로 어느 것을 사용하는지 알려주십시오. –

+0

제 3 자 회사가 개발 한 복잡한 crm 시스템 용 xslt/html 템플릿을 만듭니다. xslt 변환은 ASP.NET에서 작성된 서버 측에서 수행됩니다. 그러나 어떤 XSLT 프로세서가 사용되는지 확실하게 알 수는 없습니다 (ASP.NET에서 구현이 여러 개있는 경우). – Kshatra

+0

환경에 http://home.arcor.de/martin.honnen/xslt/processorTest2.xml을 실행하고 어떤 출력을 사용하는지 알려 주시면 사용중인 XSLT 프로세서를 알 수 있습니다. 'XslCompiledTransform'을 사용하고 있다면 http://msdn.microsoft.com/en-us/library/wxaw5z5e%28v=vs.110%29.aspx의 매핑은 노드 집합이 XPathNodeIterator로 표현되어야 함을 나타냅니다 '.NET 코드에서. 그것이 당신을 위해 작동하지 않는다면 우리는 당신의 코드를 볼 필요가 있습니다. –

답변

1

XSLT 프로세서가 Internet Explorer에서 XSLT 프로세서로 사용되는 MSXML 3 또는 MSXML 6과 같은 MSXML 버전이라고 가정하면 API는 http://msdn.microsoft.com/en-us/library/ms764730%28v=vs.85%29.aspx에 문서화 된 MSXML API입니다. XPath 식에 의해 선택된 노드의 세트는 IXMLDOMSelection (http://msdn.microsoft.com/en-us/library/ms757852%28v=vs.85%29.aspx를 참조)

function test(nodes) { 
    var node; 
    var sum = 0; 
    while ((node = nodes.nextNode()) !== null) { 
    sum += parseFloat(node.selectSingleNode('val').text.replace(',', '.')); 
    } 
    return sum; 
}