2012-10-24 2 views
0

여기에 내 벽을 때려 ...XSLT 2.0. 함수 내의 루프

주 직원이 여러 부양 가족을 가질 수있는 다음 데이터가 있습니다. Dependent_SSN에 대해 Employee 's SSN (ab : SSN)과 일치하는 함수를 만들고 그 중 하나가 '배우자'인지 확인해야합니다. 그렇다면 우리는 '배우자'의 Dependent_SSN을 반환 할 것입니다. 그렇지 않으면 우리는 다음 단계의 'Spouse'Dependent_SSN을 반환합니다.

필자는 두 번 이상 필요하다고 생각하는 함수를 만들려고합니다. 코드 스 니펫은 다른 루핑 기능을 수행하는 기존 템플리트 내에 있습니다.

나는이 시도했지만 산소는 오류를 반환 :

<xsl:function name="ab:PQB"> 
    <xsl:param name="EE_SSN"> 
    </xsl:param> 

    <xsl:for-each select="/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]ab:dependents/ab:Dependent_SSN"> 

    </xsl:for-each> 

오류가 반환됩니다

"엔진 명 : 색슨-PE 9.3.0.5 심각도 : 치명적인 설명 : 예기치 않은 토큰 이름 "wd : 종속 변수"끝 부분을 넘어서 "

나는 부양 가족을 반복하면서 높은 수준의 SSN을 테스트해야한다는 것을 알고 있지만"나는 내 벽에 맞았다 "고 말했다.

데이터는 여기에 있습니다 :

<ab:Report_Entry> 
<ab:SSN>888881006</ab:SSN> 
<ab:Last_Name>Smith</ab:Last_Name> 
<ab:First_Name>Kimberly</ab:First_Name> 
<ab:dependents> 
<ab:Dependent_SSN>888881009</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Spouse"> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881004</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Child"> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881003</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Child"> 
<ab:ID ab:type="Related_Person_Relationship_ID">Child</ab:ID> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881001</ab:Dependent_SSN> 
<ab:Dependent_ID>1032D-4</ab:Dependent_ID> 
<ab:Relation ab:Descriptor="Child"> 
<ab:ID ab:type="Related_Person_Relationship_ID">Child</ab:ID> 
</ab:Relation> 
</ab:dependents> 
</ab:Report_Entry> 

어떤 조언을 주셔서 감사합니다!

답변

0

입력 매개 변수의 유형과 함수 결과의 유형을 정의한 다음 해당 유형의 값을 반환하는 함수 본문을 작성해야 할 수 있습니다. 현재 귀하의 설명은 다소 절차 적으로 들리지만 XSLT/XPath에서는 작동하지 않습니다.

오류에 대해서는 /ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]ab:dependents/ab:Dependent_SSN 경로에서 구문 적으로 올바른 경로를 사용하려면 /ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:dependents/ab:Dependent_SSN이 하나 더 필요하다고 생각합니다. 그렇게하면 구문 오류가 발생하지 않지만 원하는 결과를 반환하지는 않습니다.

+0

마틴, 감사합니다. 나는 입력 함수의 타이핑에 접근하는 방법을 확신하지만, 나는 그것을 연구 할 수있다. 제안을 시도했지만 다음과 같은 오류가 발생했습니다 : ** 엔진 이름 : Saxon-PE 9.3.0.5 심각도 : 치명적 설명 앞의 '/'는 컨텍스트 항목이 포함 된 트리의 루트 노드를 선택할 수 없습니다. 컨텍스트 항목이 정의되지 않았습니다 ** –

+0

경로 자체는 더 이상 오류가 아니지만 함수 내부에서 사용하려고하면 오류가 발생합니다. 함수에 매개 변수로 노드를 전달하고 해당 노드를 기준으로 경로를 작성해야합니다.'을 참조하십시오. 다시 이것은 개념적 수정이지 기능을 수정하려는 시도는 아닙니다. –