xml - XSLT contains error -
i apologize crude explanation, i'm new xml , xslt. patience.
here's challange, i'm trying build transformation csv creates new line each instance of employee's benefit enrollments. so, if they're enrolled in 2 plans, line gets created each plan. same being done thier dependents.
xml, how loop through different nodes , pick right data?
while trying make sure don't make lines dependents aren't enrolled in benefit, came across error:
description: xpty0004: sequence of more 1 item not allowed first argument of contains() ("system_id", "dependent_id", ...)
i see there more 1 id type in dependent element, don't want specifiy 1 use because need scan both of them.
here's xml:
<report> <employee_id>111111</employee_id> <last_name>allen</last_name> <first_name>amy</first_name> <benefit_elections> <benefit_type>accident</benefit_type> <coverage>employee + family</coverage> <enrolled_worker descriptor="amy allen (111111)"> <id type="system_id">aaaaaa</id> <id type="employee_id">111111</id> </enrolled_worker> <benefit_plan descriptor="accident"> <id type="system_id">121212</id> <id type="health_care_id">hcp01</id> </benefit_plan> <covered_dependents descriptor="sally allen"> <id type="system_id">bbbbbb</id> <id type="dependent_id">22222</id> </covered_dependents> <covered_dependents descriptor="bob allen"> <id type="system_id">ffffff</id> <id type="dependent_id">44444</id> </covered_dependents> </benefit_elections> <benefit_elections> <benefit_type>critical illness</benefit_type> <coverage>$10,000</coverage> <calculated_coverage>$10,000</calculated_coverage> <enrolled_worker descriptor="amy allen (111111)"> <id type="system_id">aaaaaa</id> <id type="employee_id">111111</id> </enrolled_worker> <benefit_plan descriptor="critical illness (child)"> <id type="system_id">ssssss</id> <id type="insurance_coverage_plan_id">icpchild</id> </benefit_plan> <covered_dependents descriptor="sally allen"> <id type="system_id">bbbbbb</id> <id type="dependent_id">22222</id> </covered_dependents> </benefit_elections> <benefit_elections> <benefit_type>critical illness</benefit_type> <coverage>$15,000</coverage> <calculated_coverage>$15,000</calculated_coverage> <enrolled_worker descriptor="amy allen (111111)"> <id type="system_id">aaaaaa</id> <id type="employee_id">111111</id> </enrolled_worker> <benefit_plan descriptor="critical illness (spouse)"> <id type="system_id">tttttt</id> <id type="insurance_coverage_plan_id">icpspouse</id> </benefit_plan> <covered_dependents descriptor="bob allen"> <id type="system_id">ffffff</id> <id type="dependent_id">44444</id> </covered_dependents> </benefit_elections> <benefit_elections> <benefit_type>critical illness</benefit_type> <coverage>$30,000</coverage> <calculated_coverage>$30,000</calculated_coverage> <enrolled_worker descriptor="amy allen (111111)"> <id type="system_id">aaaaaa</id> <id type="employee_id">111111</id> </enrolled_worker> <benefit_plan descriptor="critical illness (employee)"> <id type="system_id">uuuuuu</id> <id type="insurance_coverage_plan_id">icpemployee</id> </benefit_plan> </benefit_elections> <dependents> <first_name>sally</first_name> <last_name>allen</last_name> <relationship descriptor="child"> <id type="related_person_relationship_id">child</id> </relationship> <dependent_id descriptor="sally allen"> <id type="system_id">bbbbbb</id> <id type="dependent_id">22222</id> </dependent_id> </dependents> <dependents> <first_name>bob</first_name> <last_name>allen</last_name> <relationship descriptor="spouse"> <id type="related_person_relationship_id">spouse</id> </relationship> <uses_tobacco>0</uses_tobacco> <dependent_id descriptor="bob allen"> <id type="system_id">ffffff</id> <id type="dependent_id">44444</id> </dependent_id> </dependents> </report>
here's xslt:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xs="http://www.w3.org/2001/xmlschema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/"> <xsl:for-each select="report"> <record> <xsl:call-template name="employeedata"/> <xsl:for-each select="dependents"> <xsl:call-template name="print_dependents"> <xsl:with-param name="benefitsextractemployeenode" select=".."/> </xsl:call-template> </xsl:for-each> </record> </xsl:for-each> </xsl:template> <xsl:template name="employeedata"> <first_name><xsl:value-of select="first_name"/></first_name> <last_name><xsl:value-of select="last_name"/></last_name> <benefit_type><xsl:value-of select="benefit_elections/benefit_type"/></benefit_type> <coverage><xsl:value-of select="benefit_elections/coverage"/></coverage> <calculated_coverage><xsl:value-of select="benefit_elections/calculated_coverage"/></calculated_coverage> </xsl:template> <xsl:template name="print_dependents"> <xsl:param name="benefitsextractemployeenode"/> <xsl:if test="contains($benefitsextractemployeenode/benefit_elections/covered_dependents[id/@type ='dependent_id']/id/@type, dependents/dependent_id[id/@type='dependent_id']/id/@type)"> <dependent> <first_name><xsl:value-of select="dependents/first_name"/></first_name> <last_name><xsl:value-of select="dependents/last_name"/></last_name> <benefit_type><xsl:value-of select="$benefitsextractemployeenode/benefit_elections/benefit_type"/></benefit_type> <coverage><xsl:value-of select="$benefitsextractemployeenode/benefit_elections/coverage"/></coverage> <calculated_coverage><xsl:value-of select="$benefitsextractemployeenode/benefit_elections/calculated_coverage"/></calculated_coverage> </dependent> </xsl:if> </xsl:template> </xsl:stylesheet>
it's hard tell you're trying (you mention transforming csv, xslt outputting xml) without example of desired output.
however, should able move contains()
id
element in xsl:if
test...
<xsl:if test="$benefitsextractemployeenode/benefit_elections/covered_dependents[ id/@type ='dependent_id']/id[contains(@type, dependents/dependent_id[id/@type='dependent_id']/id/@type)]"> ... </xsl:if>
Comments
Post a Comment