A small correction to Davids awnser the Anumber is not an ancestor to PS.
So the xpath
ancestor::ANUMBER
doesn't match the ANUMBER nodes.
Instead use
<xsl:copy-of select="ancestor::PSS/preceding-sibling::ANUMBER[1]"/>
Regards
Erik
-----Ursprungligt meddelande-----
FrC%n: David Rudel fwqhgads@xxxxxxxxx
[mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx]
Skickat: den 29 juli 2016 06:28
Till: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Cmne: Re: Need XSLT help Please
What you are looking to do can be prescribed as:
1. When you see a <PS> element, include a copy of the <ANUMBER> element that
is its ancestor.
2. Otherwise, keep everything the same.
Let's do number 2 first: the easy way to do this in xslt3 is with this
instruction:
<xsl:mode on-no-match="shallow-copy"/>
This says "unless I tell you otherwise, just make a copy of everything you
see." (Technically it says "anytime you hit a node that has no prescribed
instruction, copy the node and then process each of its elements inside the
copy you made.")
To do number 1 you want something like this:
<xsl:template match="PS">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="ancestor::ANUMBER[1]"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
This says "When you hit a PS mode, make a copy (including any attributes),
then embed a copy of the nearest ancestor ANUMBER mode (the "[1]" says "the
first one you see as you move up the chain of ancestors).
Then the <xsl:apply-templates/> instruction tells the program to move on
processing all the children of the <PS> element.
So altogether I think this should work:
<?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="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="PS">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="ancestor::ANUMBER"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
On Thu, Jul 28, 2016 at 7:59 PM, Rahul Singh rahulsinghindia15@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
wrote:
>
> Hi,
>
> I am Begineer not much experience in XSL so that i have posted that
question. I had tried lot but get fail. I need XSLT code for that sample input
output:
>
> I tried much but fail. My question is put ANUMBER from AC with corresponding
PS.
>
>
> Sample Input:
>
> <?xml version="1.0" encoding="UTF-8"?> <ACS>
> <AC>
> <ANUMBER>55555</ANUMBER>
> <PSS>
> <PS>
> <S>NEF</S>
> <C>63872R798</C>
> </PS>
> </PSS>
> </AC>
> <AC>
> <ANUMBER>330448</ANUMBER>
> <PSS>
> <PS>
> <S/>
> <C>1060150</C>
> </PS>
> <PS>
> <S/>
> <C>1260150</C>
> </PS>
> </PSS>
> </AC>
> </ACS>
>
>
>
>
> Sample OutPut:
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <ACS>
> <AC>
> <ANUMBER>55555</ANUMBER>
> <PSS>
> <PS>
> <ANUMBER>55555</ANUMBER>
> <S>NEF</S>
> <C>63872R798</C>
> </PS>
> </PSS>
> </AC>
> <AC>
> <ANUMBER>330448</ANUMBER>
> <PSS>
> <PS>
> <ANUMBER>330448</ANUMBER>
> <S/>
> <C>1060150</C>
> </PS>
> <PS>
> <ANUMBER>330448</ANUMBER>
> <S/>
> <C>1260150</C>
> </PS>
> </PSS>
> </AC>
> </ACS>
>
> XSL-List info and archive
> EasyUnsubscribe (by email)
--
"A false conclusion, once arrived at and widely accepted is not
dislodged easily, and the less it is understood, the more tenaciously
it is held." - Cantor's Law of Preservation of Ignorance.
|