SSIS 패키지 XML 작업 내에서 XML 파일에 XSL 변환을 적용하려고합니다.SSIS의 XML 작업에서 exsl 함수 node-set() 사용/구현
불행히도 내 XSL은 정상적인 것보다 약간 "이동성이 떨어짐"이며, node-set()
함수를 사용해야합니다. 내 XSL의 간단한 예는 다음과 같습니다
<xsl:for-each select="msxsl:node-set($familyNames)/token">
<xsl:call-template name="PersonNameComponent">
<xsl:with-param name="nameComponentType" select="'S'" />
<xsl:with-param name="nameComponentSeqNo" select="number($noOfGivenNames) + position()" />
<xsl:with-param name="nameComponent" select="." />
<xsl:with-param name="nameTypeName" select="$familyName" />
<xsl:with-param name="roleCode" select="$roleCode" />
</xsl:call-template>
</xsl:for-each>
나는 스타일 시트 선언에 다음 네임 스페이스를 사용하고 있습니다 : 나는 XSLT를 설정 한대로이만큼 VS IDE, XMLSPY (작동
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
MSXML 같은 엔진) 등 그러나, 나는 다음과 같은 예외가 패키지 내에서 XML 작업을 실행하려고 할 때 :
Error: 0xC002F304 at XML Task, XML Task: An error occurred with the following error message: "Function 'msxsl:node-set()' has failed.".
나는 그것이 SSIS의 2005 년 버전의로 패키지를 디자인하는 VS2005를 사용하고 있습니다.
내가 어떻게 진행할 수 있는지에 대한 아이디어는 매우 높이 평가됩니다.
EXSLT str : split 함수를 구현하는 템플릿을 호출하여 구성 요소에 문자열을 "토큰 화"합니다.
<token>Kermit</token>
<token>T</token>
<token>Frog</token>
이 내가 다음을 통해 반복 변수 $ familyNames에 저장되어 다음과 같이 "커밋 T 개구리"반환됩니다. 그러나 이것은 결과 트리 조각으로 반환되므로 결과를 노드 집합으로 처리하도록 msxsl : node-set() 함수로 래핑해야합니다. 확실하지 어떻게 내가 위의 달성 할 수 있습니다. 여기
는 STR의 구현입니다 :<xsl:template name="str:split">
<xsl:param name="string" select="''" />
<xsl:param name="pattern" select="' '" />
<xsl:choose>
<xsl:when test="not($string)" />
<xsl:when test="not($pattern)">
<xsl:call-template name="str:_split-characters">
<xsl:with-param name="string" select="$string" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="str:_split-pattern">
<xsl:with-param name="string" select="$string" />
<xsl:with-param name="pattern" select="$pattern" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="str:_split-characters">
<xsl:param name="string" />
<xsl:if test="$string">
<token><xsl:value-of select="substring($string, 1, 1)" /></token>
<xsl:call-template name="str:_split-characters">
<xsl:with-param name="string" select="substring($string, 2)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="str:_split-pattern">
<xsl:param name="string" />
<xsl:param name="pattern" />
<xsl:choose>
<xsl:when test="contains($string, $pattern)">
<xsl:if test="not(starts-with($string, $pattern))">
<token><xsl:value-of select="substring-before($string, $pattern)" /></token>
</xsl:if>
<xsl:call-template name="str:_split-pattern">
<xsl:with-param name="string" select="substring-after($string, $pattern)" />
<xsl:with-param name="pattern" select="$pattern" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<token><xsl:value-of select="$string" /></token>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
$ familyNames의 출처는 어디입니까? XSLT를 생성하는 부분을 게시 할 수 있습니까? 어쩌면 node-set()을 피할 수있는 방법이있을 수 있습니다. – Tomalak
수정 된 질문은 요청한대로 문제를 자세히 설명합니다. – pFrenchie