cancel
Showing results for 
Search instead for 
Did you mean: 

Help with XSLT

Former Member
0 Kudos

Hi guys

I am new to XSLT and is hoping someone here can help.

My XSLT currently looks like this:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:sap="http://www.sap.com/sapxsl" version="1.0">

<xsl:strip-space elements="*"/>

<xsl:template match="/">

<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">

<asx:values>

<ALL_ORDER>

<xsl:apply-templates select="//ORDER"/>

</ALL_ORDER>

</asx:values>

</asx:abap>

</xsl:template>

<xsl:template match="ORDER">

<ALLITEMS> <!This element name is not relevent... needed to just group the loop>

<DESCRIPTION>

<xsl:value-of select="DESCRIPTION"/>

</DESCRIPTION>

<ID>

<xsl:value-of select="ID"/>

</ID>

<ORDERSTATUS>

<xsl:value-of select="ORDERSTATUS"/>

</ORDERSTATUS>

<ORDERALL>

<xsl:for-each select="LT_ZORDER_I">

<LT_ZORDER_I> <!This element name is not relevent... needed to just group the loop>

<ARTIKEL>

<xsl:value-of select="ARTIKEL"/>

</ARTIKEL>

<DAFNR>

<xsl:value-of select="DAFNR"/>

</DAFNR>

<ARTNR>

<xsl:value-of select="ARTNR"/>

</ARTNR>

<TOTAL_KART>

<xsl:value-of select="TOTAL_KART"/>

</TOTAL_KART>

<TOTAL_MARG>

<xsl:value-of select="TOTAL_MARG"/>

</TOTAL_MARG>

</LT_ZORDER_I>

</xsl:for-each>

</ORDERALL>

</ALLITEMS>

</xsl:template>

</xsl:transform>

and this is my XML

<?xml version="1.0" encoding="UTF-8" ?>

- <data>

<DESCRIPTION>Description</DESCRIPTION>

<ID>34567</ID>

<KAMPANJ>News</KAMPANJ>

<KUND>Customer AB</KUND>

<ANSVARIG>Responsible</ANSVARIG>

<MOBILNUMMER>12345677</MOBILNUMMER>

<ORDERSTATUS>Orderstatus</ORDERSTATUS>

- <LT_ZORDER_I>

- <DATA xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup">

<ARTIKEL>Item 1</ARTIKEL>

<DAFNR>12344</DAFNR>

<ARTNR>40000018-8</ARTNR>

<DFP>8</DFP>

<INS />

<UT />

<MARG />

<MARGKR />

<MULTIST />

<MULTIUT />

<MULTIMARG />

<MULTIKR />

<P1 />

<P2 />

<P3 />

<P4 />

<P5 />

<P6 />

<P7 />

<TOTAL_KART />

<TOTAL_MARG>0</TOTAL_MARG>

<MARG_MULTI>0</MARG_MULTI>

</DATA>

- <DATA xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup">

<ARTIKEL>Item 2</ARTIKEL>

<DAFNR>12345</DAFNR>

<ARTNR>71243</ARTNR>

<DFP>50</DFP>

<INS />

<UT />

<MARG />

<MARGKR />

<MULTIST />

<MULTIUT />

<MULTIMARG />

<MULTIKR />

<P1 />

<P2 />

<P3 />

<P4 />

<P5 />

<P6 />

<P7 />

<TOTAL_KART />

<TOTAL_MARG>0</TOTAL_MARG>

<MARG_MULTI>0</MARG_MULTI>

</DATA>

- <DATA xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup">

<ARTIKEL>item 3</ARTIKEL>

<DAFNR>12346</DAFNR>

<ARTNR>81243</ARTNR>

<DFP>6</DFP>

<INS />

<UT />

<MARG />

<MARGKR />

<MULTIST />

<MULTIUT />

<MULTIMARG />

<MULTIKR />

<P1 />

<P2 />

<P3 />

<P4 />

<P5 />

<P6 />

<P7 />

<TOTAL_KART />

<TOTAL_MARG>0</TOTAL_MARG>

<MARG_MULTI>0</MARG_MULTI>

</DATA>

</LT_ZORDER_I>

</data>

I am having problem for it to loop through the items/LT_ZORDER_I records.

Anyone see why my loop is not working?

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Vinconn,

Your xsl should be like this for your input:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<ALL_ORDER>
<xsl:apply-templates select="//data"/>
</ALL_ORDER>
</asx:values>
</asx:abap>
</xsl:template>
<xsl:template match="data">
<ALLITEMS> <!--This element name is not relevent... needed to just group the loop-->
<DESCRIPTION>
<xsl:value-of select="DESCRIPTION"/>
</DESCRIPTION>
<ID>
<xsl:value-of select="ID"/>
</ID>
<ORDERSTATUS>
<xsl:value-of select="ORDERSTATUS"/>
</ORDERSTATUS>
<ORDERALL>
<xsl:for-each select="LT_ZORDER_I/DATA">
<LT_ZORDER_I> <!--This element name is not relevent... needed to just group the loop-->
<ARTIKEL>
<xsl:value-of select="ARTIKEL"/>
</ARTIKEL>
<DAFNR>
<xsl:value-of select="DAFNR"/>
</DAFNR>
<ARTNR>
<xsl:value-of select="ARTNR"/>
</ARTNR>
<TOTAL_KART>
<xsl:value-of select="TOTAL_KART"/>
</TOTAL_KART>
<TOTAL_MARG>
<xsl:value-of select="TOTAL_MARG"/>
</TOTAL_MARG>
</LT_ZORDER_I>
</xsl:for-each>

</ORDERALL>
</ALLITEMS>
</xsl:template>
</xsl:transform>

Then your output will be like this as expected by you:

<?xml version="1.0" encoding="UTF-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
	<asx:values>
		<ALL_ORDER>
			<ALLITEMS>
				<DESCRIPTION>Description</DESCRIPTION>
				<ID>34567</ID>
				<ORDERSTATUS>Orderstatus</ORDERSTATUS>
				<ORDERALL>
					<LT_ZORDER_I>
						<ARTIKEL>Item 1</ARTIKEL>
						<DAFNR>12344</DAFNR>
						<ARTNR>40000018-8</ARTNR>
						<TOTAL_KART/>
						<TOTAL_MARG>0</TOTAL_MARG>
					</LT_ZORDER_I>
					<LT_ZORDER_I>
						<ARTIKEL>Item 2</ARTIKEL>
						<DAFNR>12345</DAFNR>
						<ARTNR>71243</ARTNR>
						<TOTAL_KART/>
						<TOTAL_MARG>0</TOTAL_MARG>
					</LT_ZORDER_I>
					<LT_ZORDER_I>
						<ARTIKEL>item 3</ARTIKEL>
						<DAFNR>12346</DAFNR>
						<ARTNR>81243</ARTNR>
						<TOTAL_KART/>
						<TOTAL_MARG>0</TOTAL_MARG>
					</LT_ZORDER_I>
				</ORDERALL>
			</ALLITEMS>
		</ALL_ORDER>
	</asx:values>
</asx:abap>

Here in the output you have one header and the three items. So we are looping for each data you have those many number of items in output. Hope this is what you are expecting.

Regards,

---Satish

stefan_grube
Active Contributor
0 Kudos

> I am having problem for it to loop through the items/LT_ZORDER_I records.

I do not see a node named items.

I do also not see node named ORDER.

Maybe you let us know, what target structure you want achieve?

> Anyone see why my loop is not working?

What do you mean be "not working"?

Former Member
0 Kudos

Not sure hwo I can explain it but.

For every header there can be several items.

Header = Description, ID, Kampanj, Kund, Ansvarig, Mobilnummer, Orderstatus

Item1 = Artikel, Dafnr, Artnr, DFP, INS, UT, MARG, MARGKR, MULTIST, MULTIUT, MULTIMARG, MULTITKR, P1, P2, P3, P4, P5, P6, P7, Total_kart, Total_marg, Marg_Multi

Item2 = Artikel, Dafnr, Artnr, DFP, INS, UT, MARG, MARGKR, MULTIST, MULTIUT, MULTIMARG, MULTITKR, P1, P2, P3, P4, P5, P6, P7, Total_kart, Total_marg, Marg_Multi

Item3 = Artikel, Dafnr, Artnr, DFP, INS, UT, MARG, MARGKR, MULTIST, MULTIUT, MULTIMARG, MULTITKR, P1, P2, P3, P4, P5, P6, P7, Total_kart, Total_marg, Marg_Multi

Thanks

stefan_grube
Active Contributor
0 Kudos

> Not sure hwo I can explain it but.

Just provide source XML and target XML.