Subject: Re: [xsl] Combining of nested children From: Syd Bauman <Syd_Bauman@xxxxxxxxx> Date: Thu, 6 Sep 2012 00:28:19 -0400 |
Not sure I understand the requirements completely, but given your input, the following does produce the desired output. --------- <?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"> <!-- standard easy-to-write identity template --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- process a heading that has an @id specially: --> <xsl:template match="Heading[@id]"> <xsl:copy> <!-- first, process my attributes --> <xsl:apply-templates select="@*"/> <!-- then, copy over desired <ToRef> --> <xsl:apply-templates select="../../Item/Heading[ not(@id) and @entry = current()/@entry and @data eq current()/@data ]/ToRef"/> <!-- last, process my children --> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> <!-- ignore <Item>s that have <Heading>s from which we already took the <ToRef> --> <!-- (Note that this code does not check to see that we actually took or will --> <!-- take the <ToRef> ? rather it just tests if there is no id= attr, and figures --> <!-- that if there is not an id=, then the entry= and data= must have matched. --> <xsl:template match="Item[Heading[not(@id)]]"/> </xsl:stylesheet> --------- > I need to find <Items> in a <List> that have an identical <Heading> > attributes except for the @id, and insert a <ToRefs> element from > the <Item> without an @id into the <Item> that has the @id > attribute. Sample input and output <Item>s are shown below. > > I will need to do the same sort of insertion at the <SubDiv1> > level, or at the two other possible nested levels of <SubDiv2> and > <SubDiv3> [not shown]. > > I will try to figure out how to do those latter cases once I > understand how to do the <Headings> case. > > Any help appreciated, > Input: > > <List> > <Item> > <Heading id="A4" entry="subject" data="Abolition of Serfdom"> > <SubDiv1 id="A4-1" catalog="1" scott-number="350" pofis-number="474" > data="1948. 100th Anniversary of Abolition"> > <Article> > <Person>Bulletin of the Ministry of Posts</Person> > <Title>New issues [Title varies or absent]</Title> > </Article> > </SubDiv1> > </Heading> > </Item> > <Item> > <Heading entry="subject" data="Abolition of Serfdom"> > <ToRef xref="See also" data="Slovakia - Peasant Revolt 1848" file="s" > block="A1272-21"/> > </Heading> > </Item> > </List> > Output: > <List> > <Item> > <Heading id="A4" entry="subject" data="Abolition of Serfdom"> > <ToRef xref="See also" data="Slovakia - Peasant Revolt 1848" file="s" > block="A1272-21"/> > <SubDiv1 id="A4-1" catalog="1" scott-number="350" pofis-number="474" > data="1948. 100th Anniversary of Abolition"> > <Article> > <Person>Bulletin of the Ministry of Posts</Person> > <Title>New issues [Title varies or absent]</Title> > </Article> > </SubDiv1> > </Heading> > </Item>
Current Thread |
---|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Combining of nested children, Mark | Thread | Re: [xsl] Combining of nested child, Mark |
[xsl] Combining of nested children, Mark | Date | Re: [xsl] Combining of nested child, Mark |
Month |