XSLT matching PAGEID to an element ID -
how match 2 separate numbers in xml document? there multiple <pgindexelementinfo>
elements in xml document, each representing different navigation element, each unique <id>
. later in document <pageid>
specifies number matches <id>
used above. how go matching <pageid>
<id>
specified above?
<element> <content> <pgindexelementinfo> <elementdata> <items> <pgindexelementitem> <id>1455917</id> </pgindexelementitem> </items> </elementdata> </pgindexelementinfo> </content> </element> <element> <content> <customelementinfo> <pageid>1455917</pageid> </customelementinfo> </content> </element>
edit:
i added solution below code. xsl:apply-templates
present used recreate nested lists lost between html , xml. need match pageid id of <pgindexelementitem>
, add css class <ul>
part of. hope makes sense.
<xsl:key name="kidbyvalue" match="id" use="."/> <xsl:template match="pageid[key('kidbyvalue',.)]"> <xsl:apply-templates select="//pgindexelementitem[not(contains(description, '.'))]" /> </xsl:template> <xsl:template match="pgindexelementitem"> <li> <a href="{resolvedurl/absolute}"><xsl:value-of select="title"/></a> <xsl:variable name="prefix" select="concat(description, '.')"/> <xsl:variable name="childoptions" select="../pgindexelementitem[starts-with(description, $prefix) , not(contains(substring-after(description, $prefix), '.'))]"/> <xsl:if test="$childoptions"> <ul> <xsl:apply-templates select="$childoptions" /> </ul> </xsl:if> </li> </xsl:template>
the xslt way dealing cross references keys.
matching: rule matching every pageid
element has been referenced id
element.
<xsl:key name="kidbyvalue" match="id" use="."/> <xsl:template match="pageid[key('kidbyvalue',.)]"> <!-- template content --> </xsl:template>
selecting: expression selecting every pageid
element specific value.
<xsl:key name="kpageidbyvalue" match="pageid" use="."/> <xsl:template match="id"> <xsl:apply-templates select="key('kpageidbyvalue',.)"/> </xsl:template>
Comments
Post a Comment