R
rnakawat
I seem to have a problem using the preceding:: on substrings of the
value. I'll try to explain with an example:
Let's say I had a XML that look like:
<Root>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="Meadow Lane" />
</Row>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="Meadow Lane" />
</Row>
</Root>
Let's say I want to find the distinct streets. This is straight
forward and may look something like:
<xsl:template match="Root">
<xsl:element name="root">
<xsl:for-each select="./Row[Cell[@Name = 'Street' and not(@Value =
preceding::Cell[@Name= 'Street']/@Value) ]]">
<xsl:variable name="UniqueStreet" select="./Cell[@Name='Street']/
@Value"/>
<xsl:element name="street">
<xsl:attribute name="name">
<xsl:value-of select="$UniqueStreet"/>
</xsl:attribute>
<!-- This is where I would reiterate through the list to get the
list of residents
that live on that block -->
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
This returns what I expect:
<root>
<street name="2nd Street"/>
<street name="Meadow Lane"/>
</root>
But let's say the address contained street numbers, and I needed to
strip out the street numbers when trying to look for unique street
names.
<Root>
<Row>
<Cell Name="Address" Value="1345 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="332 Meadow Lane" />
</Row>
<Row>
<Cell Name="Address" Value="333 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="8534 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="556 Meadow Lane" />
</Row>
</Root>
<xsl:template match="Root">
<xsl:element name="root">
<xsl:for-each select="./Row[Cell[@Name = 'Address' and
not(substring-after(@Value, ' ') = substring-
after(preceding::Cell[@Name= 'Address']/@Value, ' ')) ]]">
<xsl:variable name="UniqueStreet" select="substring-after(./
Cell[@Name='Address']/@Value, ' ')"/>
<!-- This is where I would reiterate through the list to get the
list of residents
that live on that block -->
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
This yields the output:
<root>
<street name="2nd Street"/>
<street name="Meadow Lane"/>
<street name="Meadow Lane"/>
</root>
Can someone explain why that is happening and how I can fix it?
value. I'll try to explain with an example:
Let's say I had a XML that look like:
<Root>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="Meadow Lane" />
</Row>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="2nd Street" />
</Row>
<Row>
<Cell Name="Street" Value="Meadow Lane" />
</Row>
</Root>
Let's say I want to find the distinct streets. This is straight
forward and may look something like:
<xsl:template match="Root">
<xsl:element name="root">
<xsl:for-each select="./Row[Cell[@Name = 'Street' and not(@Value =
preceding::Cell[@Name= 'Street']/@Value) ]]">
<xsl:variable name="UniqueStreet" select="./Cell[@Name='Street']/
@Value"/>
<xsl:element name="street">
<xsl:attribute name="name">
<xsl:value-of select="$UniqueStreet"/>
</xsl:attribute>
<!-- This is where I would reiterate through the list to get the
list of residents
that live on that block -->
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
This returns what I expect:
<root>
<street name="2nd Street"/>
<street name="Meadow Lane"/>
</root>
But let's say the address contained street numbers, and I needed to
strip out the street numbers when trying to look for unique street
names.
<Root>
<Row>
<Cell Name="Address" Value="1345 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="332 Meadow Lane" />
</Row>
<Row>
<Cell Name="Address" Value="333 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="8534 2nd Street" />
</Row>
<Row>
<Cell Name="Address" Value="556 Meadow Lane" />
</Row>
</Root>
<xsl:template match="Root">
<xsl:element name="root">
<xsl:for-each select="./Row[Cell[@Name = 'Address' and
not(substring-after(@Value, ' ') = substring-
after(preceding::Cell[@Name= 'Address']/@Value, ' ')) ]]">
<xsl:variable name="UniqueStreet" select="substring-after(./
Cell[@Name='Address']/@Value, ' ')"/>
said:</xsl:attribute>
<!-- This is where I would reiterate through the list to get the
list of residents
that live on that block -->
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
This yields the output:
<root>
<street name="2nd Street"/>
<street name="Meadow Lane"/>
<street name="Meadow Lane"/>
</root>
Can someone explain why that is happening and how I can fix it?