Subject: [xsl] Problem with grouping on elements that are not always present From: Dieter Schmerlaib <dschmerlaib@xxxxxxxxxxxxxxxx> Date: Wed, 11 Aug 2010 17:27:21 +0930 |
I trying to do a two level group using keys and failing given the following data. The first group is on <WorkArea> the second on <Skill>. See --Data Start-- below My problem is that I don't know how to deal with the fact that there is not always a WorkArea or Skill element and I want to include all data even when either or these elements don't exist. I am trying to use the stylesheet below see --StyleSheet Start-- I am successful when a Skill element exists but not when it doesn't. In addition if there is WorkArea and no skill I do not see the row I want ie There should be an output in my data for all those Sheets without a WorkArea or Skill and with a WorkArea if there is no skill. ie TransactionNo = (1,2,8) do not show up Thanks --StyleSheet Start-- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:key name="WorkAreas" match="Sheet/PlanningData" use="concat(WorkArea,'None')" /> <xsl:key name="Skills" match="SkillRequirement" use="concat(../WorkArea,'None',Skill,'None')" /> <xsl:template match="CertificationSheets"> <HTML> <HEAD><TITLE>TEST</TITLE></HEAD> <BODY> <xsl:apply-templates select="Sheet/PlanningData/SkillRequirement [generate-id(.) = generate-id(key('Skills',concat(../WorkArea,'None',Skill,'None'))[1])] "> </xsl:apply-templates> </BODY> </HTML> </xsl:template> <xsl:template match="SkillRequirement"> <P>Work Area: <xsl:value-of select="../WorkArea"/> </P> <P>Skill: <xsl:value-of select="Skill"/> </P> <P> <TABLE border="1"> <TBODY> <TR> <TD> <B>Trn #</B> </TD> <TD> <B>Type</B> </TD> </TR> <xsl:for-each select="key('Skills',concat(../WorkArea,'None',Skill,'None'))"> <TR> <TD> <B><xsl:value-of select="../../Summary/WorkOrderInfo/TransactionNo" /></B> </TD> <TD> <B> <xsl:value-of select="../../Detail/Task/Type" /> </B> </TD> </TR> </xsl:for-each> </TBODY> </TABLE> </P> </xsl:template> </xsl:stylesheet> --StyleSheet End-- --Data Start-- <?xml version="1.0" encoding="CP437"?> <?xml-stylesheet type="text/xsl" href="task_summ_html.xsl"?> <CertificationSheets> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000001</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>SERV</Type> </Task> </Detail> <PlanningData> <WorkArea>EI&R</WorkArea> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000002</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>INSP/FUNC</Type> </Task> </Detail> <PlanningData> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000003</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>OPTNL CK</Type> </Task> </Detail> <PlanningData> <WorkArea>EI&R</WorkArea> <SkillRequirement> <Skill>ELEC/INST</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000004</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>OPTNL CK</Type> </Task> </Detail> <PlanningData> <WorkArea>EI&R</WorkArea> <SkillRequirement> <Skill>ELEC/INST</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000005</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>OPTNL CK</Type> </Task> </Detail> <PlanningData> <WorkArea>CCC</WorkArea> <SkillRequirement> <Skill>AIRFRAME</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000006</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>INSP</Type> </Task> </Detail> <PlanningData> <WorkArea>LH ENG</WorkArea> <SkillRequirement> <Skill>ELECTRICAL</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> <SkillRequirement> <Skill>AIRFRAME</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000007</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>INSP</Type> </Task> </Detail> <PlanningData> <WorkArea>LH ENG</WorkArea> <SkillRequirement> <Skill>ELECTRICAL</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000008</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>INSP/FUNC</Type> </Task> </Detail> <PlanningData> </PlanningData> </Sheet> <Sheet> <Summary> <WorkOrderInfo> <TransactionNo>000009</TransactionNo> </WorkOrderInfo> </Summary> <Detail> <Task> <Type>INSP</Type> </Task> </Detail> <PlanningData> <SkillRequirement> <Skill>ELECTRICAL</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> <SkillRequirement> <Skill>ENGINES</Skill> <ManHours> 1.00</ManHours> </SkillRequirement> </PlanningData> </Sheet> </CertificationSheets> --Data End-
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Index with multiple <page, Wendell Piez | Thread | Re: [xsl] Problem with grouping on , Martin Honnen |
RE: [xsl] Index with multiple <page, Wendell Piez | Date | Re: [xsl] question about generate-i, Mark Howe |
Month |