Subject: Re: [xsl] problem with key From: "Albright, Jim jim_albright@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 14 Apr 2021 22:28:27 -0000 |
In thinking about this, it looks like this can be written as a recursive routine. Is this correct? Right now I run a batch file and increment the level for each step. Jim Albright Wycliffe Bible Translators 704-562-1529 On Wed, Apr 14, 2021 at 4:48 PM Albright, Jim jim_albright@xxxxxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Thank you David and Dimitre, > > You are both right. Thank you. I would have responded sooner but it took > me some time to find a bug that caused the file to grow. I now pass a > /level/ parameter to facilitate deleting duplicates. Here is working XSLT > > <xsl:param name="level"></xsl:param> > <xsl:output method="xml" indent="yes" /> > <xsl:variable name="lookupDoc" select="document('step2.xml')"/> > > <xsl:key name="SemanticDomainByParent" match="CmSemanticDomain" > use="@parent" /> > > <xsl:template match="CmSemanticDomain[@level=$level]"/> > > <xsl:template match="line[@tag='gd']"> > <xsl:variable name="parentSD" select="parent::*/@sd"/> > <SubPossibilities> > <xsl:copy-of select="key('SemanticDomainByParent', $parentSD, > $lookupDoc)"/> > </SubPossibilities> > </xsl:template> > > <!-- identity transform --> > <xsl:template match="@* | node()"> > <xsl:copy> > <xsl:apply-templates select="@* | node()"/> > </xsl:copy> > </xsl:template> > > I ended up building the hierarchy one transformation at a time. The > inserted text has tag = 'gd' which triggers the insertion the next time > around. So multiple application of the same XSL does the trick. > > I started by creating a file with just the 0 level of hierarchy. I then > inserted the correct information from an external file at the correct > location. There may be easier ways of doing this. But this is something > that I can explain fairly easily to novices. You continue until you have > processed all the levels. > > Thank you again for your help. > > Jim Albright > Wycliffe Bible Translators > 704-562-1529 > > > On Mon, Apr 12, 2021 at 1:20 AM David Maus lists@xxxxxxxxxx < > xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > >> On Mon, 12 Apr 2021 06:08:46 +0200, >> Albright, Jim jim_albright@xxxxxxxxxxxx wrote: >> > >> > [1 <text/plain; UTF-8 (7bit)>] >> > [2 <text/html; UTF-8 (quoted-printable)>] >> > I am trying to upconvert from a flat-file. After I get it into XML form >> I try to add hierarchy using "key". >> > ------------- >> > OUTPUT >> > ------------- >> > I get NO results from >> > <SubPossibilities> >> > <xsl:copy select="key('SemanticDomainByParent', >> '$parentSD')"/> >> > </SubPossibilities> >> >> The quotes around $parentSD look wrong. You are looking up elements >> under the string key '$parentSD'. >> >> I think it should read: >> >> <xsl:copy select="key('SemanticDomainByParent', $parentSD)"/> >> >> HTH, >> -- David >> >> > >> > so output looks like >> > <SubPossibilities/> >> > >> > So what am I doing wrong? >> > >> > Starting with this XML >> > ------------- >> > XML input >> > ------------- >> > >> > ... <Possibilities> >> > <CmSemanticDomain level="1" sd="1" parent="" >> guid="I63403699-07C1-43F3-A47C-069D6E4316E5"> >> > <line tag="sd">Universe, creation</line> >> > <line tag="gd">I63403699-07C1-43F3-A47C-069D6E4316E5</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="2" sd="1.1" parent="1" >> guid="I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C"> >> > <line tag="sd">Sky</line> >> > <line >> tag="gd">I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="3" sd="1.1.1" parent="1.1" >> guid="IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB"> >> > <line tag="sd">Sun</line> >> > <line tag="gd">IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="4" sd="1.1.1.1" parent="1.1.1" >> guid="I1BD42665-0610-4442-8D8D-7C666FEE3A6D"> >> > <line tag="sd">Moon</line> >> > <line tag="gd">I1BD42665-0610-4442-8D8D-7C666FEE3A6D</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="4" sd="1.1.1.2" parent="1.1.1" >> guid="IB044E890-CE30-455C-AEDE-7E9D5569396E"> >> > <line tag="sd">Star</line> >> > <line tag="gd">IB044E890-CE30-455C-AEDE-7E9D5569396E</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="4" sd="1.1.1.3" parent="1.1.1" >> guid="IA0D073DF-D413-4DFD-9BA1-C3C68F126D90"> >> > <line tag="sd">Planet</line> >> > <line tag="gd">IA0D073DF-D413-4DFD-9BA1-C3C68F126D90</line> >> > </CmSemanticDomain> >> > >> > ... >> > ------------- >> > XSL >> > ------------- >> > ... >> > <xsl:key name="SemanticDomainByParent" match="CmSemanticDomain" >> use="@parent" /> >> > >> > <xsl:template match="CmSemanticDomain"> >> > <CmSemanticDomain> >> > <xsl:apply-templates select="@* | node()"/> >> > <xsl:apply-templates >> select="key('SemanticDomainByParent',@sd)"/> >> > </CmSemanticDomain> >> > </xsl:template> >> > >> > <xsl:template match="line[@tag='gd']"> >> > <xsl:variable name="parentSD" select="parent::*/@parent"/> >> > <SubPossibilities> >> > <xsl:copy select="key('SemanticDomainByParent', >> '$parentSD')"/> >> > </SubPossibilities> >> > </xsl:template> >> > >> > <!-- identity transform --> >> > <xsl:template match="@* | node()"> >> > <xsl:copy> >> > <xsl:apply-templates select="@* | node()"/> >> > </xsl:copy> >> > </xsl:template> >> > >> > >> > ------------- >> > Desired OUTPUT >> > ------------- >> > ... >> > <Possibilities> >> > <CmSemanticDomain level="1" sd="1" parent="" >> guid="I63403699-07C1-43F3-A47C-069D6E4316E5"> >> > <line tag="sd">Universe, creation</line> >> > <SubPossibilities> >> > <CmSemanticDomain level="2" sd="1.1" parent="1" >> guid="I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C"> >> > <line tag="sd">Sky</line> >> > <SubPossibilities> >> > <CmSemanticDomain level="3" sd="1.1.1" >> parent="1.1" guid="IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB"> >> > <line tag="sd">Sun</line> >> > <SubPossibilities> >> > <CmSemanticDomain level="4" >> sd="1.1.1.2" parent="1.1.1" guid="IB044E890-CE30-455C-AEDE-7E9D5569396E"> >> > <line tag="sd">Star</line> >> > </CmSemanticDomain> >> > <CmSemanticDomain level="4" >> sd="1.1.1.3" parent="1.1.1" >> guid="IA0D073DF-D413-4DFD-9BA1-C3C68F126D90"> >> > <line tag="sd">Planet</line> >> > </CmSemanticDomain> >> > ... >> > </SubPossibilities> >> > </CmSemanticDomain> >> > </SubPossibilities> >> > </CmSemanticDomain> >> > </SubPossibilities> >> > </CmSemanticDomain> >> > </Possibilities> >> > >> > Jim Albright >> > Wycliffe Bible Translators >> > 704-562-1529 >> > XSL-List info and archive >> > EasyUnsubscribe (by email) >> >> -- >> David Maus M.A. >> >> Www: http://dmaus.name >> Twitter: @_dmaus >> >> >> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2835196> (by > email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] problem with key, Albright, Jim jim_al | Thread | Re: [xsl] problem with key, Martin Honnen martin |
Re: [xsl] problem with key, Albright, Jim jim_al | Date | [xsl] Same Indent in converted outp, Byomokesh Sahoo saho |
Month |