|
Subject: Re: [xsl] Comparing attributes and setting the values From: "varun bhatnagar varun292006@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 19 Aug 2014 08:33:25 -0000 |
Thanks a lot Michael! :)
I checked with another xslt processor. It worked.
I have added bit of complication here. I am not trying to merge two xml
files on the basis of same condition with the same logic. The first xml
file is same as above:
File1.xml
File.xml:
<?xml version="1.0"?>
<Move-Afile>
<Afile>
<Item>
<PackNumber level="1">1234</PackNumber>
</Item>
<Item>
<PackNumber level="1">567</PackNumber>
</Item>
<Item>
<PackNumber level="4">5672</PackNumber>
</Item>
<Item>
<PackNumber level="5">126</PackNumber>
</Item>
<Item>
<PackNumber level="7">876</PackNumber>
</Item>
</Afile>
</Move-Afile>
The second file looks like this
File2.xml
<?xml version="1.0"?>
<Move-Afile>
<Afile>
<Item>
<PackNumber level="12">222</PackNumber>
</Item>
<Item>
<PackNumber level="12">333</PackNumber>
</Item>
<Item>
<PackNumber level="14">444</PackNumber>
</Item>
<Item>
<PackNumber level="15">555</PackNumber>
</Item>
<Item>
<PackNumber level="15">666</PackNumber>
</Item>
</Afile>
</Move-Afile>
The xslt rule I have written is:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" />
<xsl:template match="PackNumber/@level">
<xsl:choose>
<xsl:when test="not(preceding::PackNumber/@level =.)">
<xsl:element name="counter">
<xsl:attribute name="level">
<xsl:value-of
select="count(preceding::PackNumber/@level[not(preceding::PackNumber/@level=
.)])+1"/>
</xsl:attribute>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="counter">
<xsl:attribute name="level">
<xsl:value-of
select="count(preceding::PackNumber/@level[not(preceding::PackNumber/@level=
.)])"/>
</xsl:attribute>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<PNumber>
<xsl:value-of select="."/>
</PNumber>
</xsl:template>
<xsl:template match="/">
<A>
<target>
<xsl:apply-templates select="//Item"/>
<xsl:apply-templates
select="document('File2.xml')/*//Item"/>
</target>
</A>
</xsl:template>
</xsl:stylesheet>
Output should look like this:
<?xml version="1.0"?>
<A>
<target>
<Item>
<PackNumber>
<counter level="1"/>
<PNumber>1</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="1"/>
<PNumber>1</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="2"/>
<PNumber>4</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="3"/>
<PNumber>5</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="4"/>
<PNumber>7</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="5"/>
<PNumber>12</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="5"/>
<PNumber>12</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="5"/>
<PNumber>14</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="6"/>
<PNumber>15</PNumber>
</PackNumber>
</Item>
<Item>
<PackNumber>
<counter level="6"/>
<PNumber>15</PNumber>
</PackNumber>
</Item>
</target>
</A>
But it is not coming this way. It starts from 1 again for the second file.
I want to be sequential.
What can I do for that?
BR,
Varun
On Mon, Aug 18, 2014 at 4:42 PM, Michael MC<ller-Hillebrand mmh@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Hi Varun,
>
> I just copied your source files into the Sandbox of Kernow for Saxon and
> got the result you describe as desired.
>
> So I assume your XSLT processor may not work correctly?
>
> - Michael
>
> Am 18.08.2014 um 15:36 schrieb varun bhatnagar varun292006@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>:
>
> This gives me the value of levels as 1, 1, 1, 2, 3. But the actual result
> should be 1, 1, 2, 3, 4 (as given in output.xml).
> Can anyone tell me what am I missing here. I came across an example on
> internet but that also didn't help.
>
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/2562907> (by
> email <>)
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Argument on XML, Ihe Onwuka ihe.onwuk | Thread | Re: [xsl] Comparing attributes and , Michael Müller-Hille |
| Re: [xsl] Argument on XML, Ihe Onwuka ihe.onwuk | Date | Re: [xsl] Debugging, Abel Braaksma (Exsel |
| Month |