 |
| XSLT General questions and answers about XSLT. For issues strictly specific to the book XSLT 1.1 Programmers Reference, please post to that forum instead. |
Welcome to the p2p.wrox.com Forums.
You are currently viewing the XSLT section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
|
|
|
|

October 17th, 2011, 02:44 PM
|
|
Registered User
|
|
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Looping issue
I have an input as :
<CTHQ895_Detail xmlns="">
<CTHQ895_Detail_Child1>G89*1*0*CA</CTHQ895_Detail_Child1>
</CTHQ895_Detail>
<CTHQ895_Detail xmlns="">
<CTHQ895_Detail_Child1>G89*33**CA*****21.38</CTHQ895_Detail_Child1>
</CTHQ895_Detail>
<CTHQ895_Detail xmlns="">
<CTHQ895_Detail_Child1>G72*499*02***-0.43</CTHQ895_Detail_Child1>
</CTHQ895_Detail>
I need output as:
<Loop1>
<G89_C>G89*1*0*CA</G89_C>
</Loop1>
<Loop1>
<G89_C>G89*33**CA*****21.38</G89_C>
<G72_C>G72*499*02***-0.43</G72_C>
</Loop1>
<Loop1>
<G89_C>G89*35**CA*****17.88</G89_C>
<G72_C>G72*499*02***-0.36</G72_C>
</Loop1>
I have a logic :
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v21" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v22" select="userCSharp:StringSubstring($var:v21 , "1" , "3")" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , "3")" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , "G89")" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , "G22")" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , "G72")" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , "G23")" />
<Loop1>
<xsl:if test="string($var:v24)='true'">
<xsl:variable name="var:v25" select="CTHQ895_Detail_Child1/text()" />
<G89_C>
<xsl:value-of select="$var:v25" />
</G89_C>
</xsl:if>
<xsl:if test="string($var:v26)='true'">
<xsl:variable name="var:v27" select="CTHQ895_Detail_Child1/text()" />
<G22_C>
<xsl:value-of select="$var:v27" />
</G22_C>
</xsl:if>
<xsl:if test="string($var:v28)='true'">
<xsl:variable name="var:v29" select="CTHQ895_Detail_Child1/text()" />
<G72_C>
<xsl:value-of select="$var:v29" />
</G72_C>
</xsl:if>
<xsl:if test="string($var:v30)='true'">
<xsl:variable name="var:v31" select="CTHQ895_Detail_Child1/text()" />
<G23_C>
<xsl:value-of select="$var:v31" />
</G23_C>
</xsl:if>
</Loop1>
</xsl:for-each>
But I get it as:
- <Loop1>
<G89_C>G89*1*0*CA</G89_C>
</Loop1>
- <Loop1>
<G89_C>G89*33**CA*****21.38</G89_C>
</Loop1>
<Loop1 />
- <Loop1>
<G89_C>G89*35**CA*****17.88</G89_C>
</Loop1>
<Loop1 />
- <Loop1>
<G89_C>G89*37**CA*****17.88</G89_C>
</Loop1>
|
|

October 18th, 2011, 04:03 AM
|
 |
Wrox Author
|
|
Join Date: Apr 2004
Posts: 4,962
Thanks: 0
Thanked 292 Times in 287 Posts
|
|
Presumably you aren't getting the G72_C element output because $var:v28 does not have the value "true". Since this variable is initialised by calling an extension function that you haven't shown us, there is no way we can know why it doesn't have the value "true".
__________________
Michael Kay
http://www.saxonica.com/
Author, XSLT 2.0 and XPath 2.0 Programmer\'s Reference
|
|

October 18th, 2011, 04:03 AM
|
 |
Friend of Wrox
|
|
Join Date: Aug 2007
Posts: 2,128
Thanks: 1
Thanked 189 Times in 188 Posts
|
|
Your input and desired output don't appear to relate to each other. Where is the 'G89*35**CA*****17.88' element in the output coming from? You also have two G* element inside one Loop element, and it is impossible to work out how you are getting that from the input. Also, your input is not actually a valid XML document, as it has no single root element.
You also use a number of user defined external functions, which you don't list. You are aware that XSLT (or to be specific XPath) include functions for substring and equality?
If I was going to make a stab in the dark and try and guess what you are trying to output I might try something like this:
Code:
<xsl:template match="CTHQ895_Detail_Child1">
<Loop1>
<xsl:element name="{substring(text(),1,3)}_C">
<xsl:value-of select="."/>
</xsl:element>
</Loop1>
</xsl:template>
As you can see, I think you've tried throwing the sink at the problem and created more problems for yourself.
|
|

October 18th, 2011, 10:37 AM
|
|
Registered User
|
|
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
I have just included the part where I am having an issue, sorry for that, here is the whole xslt and my input and what I desired and the issue is only in the Loop1 for G83,G22,G72,G23.
XSLT:
<code>
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 userCSharp" version="1.0" xmlns:ns0="http://Nex895.schemas.Nex_895FFSchema" xmlns:s0="http://Nex895.schemas.CTHQ895_FlatFileSchema" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/s0:CTHQ895" />
</xsl:template>
<xsl:template match="/s0:CTHQ895">
<xsl:variable name="var:v57" select="userCSharp:StringConcat("IEA" , string(CTHQ895_Trailer/Trailer_Child/text()))" />
<ns0:Nex895>
<Nex895_Header>
<xsl:variable name="var:v1" select="userCSharp:calDun(string(CTHQ895_Header/HeaderChild/text()))" />
<DXS_05>
<xsl:value-of select="$var:v1" />
</DXS_05>
</Nex895_Header>
<Nex895_Header_1>
<Header1>
<xsl:value-of select="CTHQ895_Header/HeaderChild/text()" />
</Header1>
</Nex895_Header_1>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v2" select="userCSharp:StringSubstring(string(CTHQ895_ Detail_Child1/text()) , "1" , "3")" />
<xsl:variable name="var:v3" select="userCSharp:StringLeft(string($var:v2) , "3")" />
<xsl:variable name="var:v4" select="userCSharp:LogicalEq(string($var:v3) , "ST*")" />
<xsl:if test="string($var:v4)='true'">
<xsl:variable name="var:v5" select="CTHQ895_Detail_Child1/text()" />
<ST>
<xsl:value-of select="$var:v5" />
</ST>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v6" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v7" select="userCSharp:StringSubstring($var:v6 , "1" , "3")" />
<xsl:variable name="var:v8" select="userCSharp:StringLeft(string($var:v7) , "3")" />
<xsl:variable name="var:v9" select="userCSharp:LogicalEq(string($var:v8) , "G87")" />
<xsl:if test="string($var:v9)='true'">
<xsl:variable name="var:v10" select="CTHQ895_Detail_Child1/text()" />
<G87>
<xsl:value-of select="$var:v10" />
</G87>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v11" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v12" select="userCSharp:StringSubstring($var:v11 , "1" , "3")" />
<xsl:variable name="var:v13" select="userCSharp:StringLeft(string($var:v12) , "3")" />
<xsl:variable name="var:v14" select="userCSharp:LogicalEq(string($var:v13) , "G88")" />
<xsl:if test="string($var:v14)='true'">
<xsl:variable name="var:v15" select="CTHQ895_Detail_Child1/text()" />
<G88>
<xsl:value-of select="$var:v15" />
</G88>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v16" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v17" select="userCSharp:StringSubstring($var:v16 , "1" , "3")" />
<xsl:variable name="var:v18" select="userCSharp:StringLeft(string($var:v17) , "2")" />
<xsl:variable name="var:v19" select="userCSharp:LogicalEq(string($var:v18) , "LS")" />
<xsl:if test="string($var:v19)='true'">
<xsl:variable name="var:v20" select="CTHQ895_Detail_Child1/text()" />
<LS>
<xsl:value-of select="$var:v20" />
</LS>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v21" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v22" select="userCSharp:StringSubstring($var:v21 , "1" , "3")" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , "3")" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , "G89")" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , "G22")" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , "G72")" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , "G23")" />
<Loop1>
<xsl:if test="string($var:v24)='true'">
<xsl:variable name="var:v25" select="CTHQ895_Detail_Child1/text()" />
<G89_C>
<xsl:value-of select="$var:v21" />
</G89_C>
</xsl:if>
<xsl:if test="string($var:v26)='true'">
<xsl:variable name="var:v27" select="CTHQ895_Detail_Child1/text()" />
<G22_C>
<xsl:value-of select="$var:v21" />
</G22_C>
</xsl:if>
<xsl:if test="string($var:v28)='true'">
<xsl:variable name="var:v29" select="CTHQ895_Detail_Child1/text()" />
<G72_C>
<xsl:value-of select="$var:v21" />
</G72_C>
</xsl:if>
<xsl:if test="string($var:v30)='true'">
<xsl:variable name="var:v31" select="CTHQ895_Detail_Child1/text()" />
<G23_C>
<xsl:value-of select="$var:v21" />
</G23_C>
</xsl:if>
</Loop1>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v32" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v33" select="userCSharp:StringSubstring($var:v32 , "1" , "3")" />
<xsl:variable name="var:v34" select="userCSharp:StringLeft(string($var:v33) , "2")" />
<xsl:variable name="var:v35" select="userCSharp:LogicalEq(string($var:v34) , "LE")" />
<xsl:if test="string($var:v35)='true'">
<xsl:variable name="var:v36" select="CTHQ895_Detail_Child1/text()" />
<LE>
<xsl:value-of select="$var:v36" />
</LE>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v37" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v38" select="userCSharp:StringSubstring($var:v37 , "1" , "3")" />
<xsl:variable name="var:v39" select="userCSharp:StringLeft(string($var:v38) , "3")" />
<xsl:variable name="var:v40" select="userCSharp:LogicalEq(string($var:v39) , "G84")" />
<xsl:if test="string($var:v40)='true'">
<xsl:variable name="var:v41" select="CTHQ895_Detail_Child1/text()" />
<G84>
<xsl:value-of select="$var:v41" />
</G84>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v42" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v43" select="userCSharp:StringSubstring($var:v42 , "1" , "3")" />
<xsl:variable name="var:v44" select="userCSharp:StringLeft(string($var:v43) , "3")" />
<xsl:variable name="var:v45" select="userCSharp:LogicalEq(string($var:v44) , "G86")" />
<xsl:if test="string($var:v45)='true'">
<xsl:variable name="var:v46" select="CTHQ895_Detail_Child1/text()" />
<G86>
<xsl:value-of select="$var:v46" />
</G86>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v47" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v48" select="userCSharp:StringSubstring($var:v47 , "1" , "3")" />
<xsl:variable name="var:v49" select="userCSharp:StringLeft(string($var:v48) , "3")" />
<xsl:variable name="var:v50" select="userCSharp:LogicalEq(string($var:v49) , "G85")" />
<xsl:if test="string($var:v50)='true'">
<xsl:variable name="var:v51" select="CTHQ895_Detail_Child1/text()" />
<G85>
<xsl:value-of select="$var:v51" />
</G85>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v52" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v53" select="userCSharp:StringSubstring($var:v52 , "1" , "3")" />
<xsl:variable name="var:v54" select="userCSharp:StringLeft(string($var:v53) , "2")" />
<xsl:variable name="var:v55" select="userCSharp:LogicalEq(string($var:v54) , "SE")" />
<xsl:if test="string($var:v55)='true'">
<xsl:variable name="var:v56" select="CTHQ895_Detail_Child1/text()" />
<SE>
<xsl:value-of select="$var:v56" />
</SE>
</xsl:if>
</xsl:for-each>
<Nex895_Footer>
<Footer>
<xsl:value-of select="$var:v57" />
</Footer>
</Nex895_Footer>
</ns0:Nex895>
</xsl:template>
<msxsl:script language="C#" implements-prefix="userCSharp"><![CDATA[
///*Uncomment the following code for a sample Inline C# function
//that concatenates two inputs. Change the number of parameters of
//this function to be equal to the number of inputs connected to this functoid.*/
public string calDun(string param1)
{
string dun=null;
if(param1 != null)
{
string[] words= param1.Split('*');
int counter=0;
foreach(string word in words)
{
counter++;
if(counter ==6)
{
dun= word;
break;
}
}
}
else
dun="";
return dun;
}
public string StringConcat(string param0, string param1)
{
return param0 + param1;
}
public string StringSubstring(string str, string left, string right)
{
string retval = "";
double dleft = 0;
double dright = 0;
if (str != null && IsNumeric(left, ref dleft) && IsNumeric(right, ref dright))
{
int lt = (int)dleft;
int rt = (int)dright;
lt--; rt--;
if (lt >= 0 && rt >= lt && lt < str.Length)
{
if (rt < str.Length)
{
retval = str.Substring(lt, rt-lt+1);
}
else
{
retval = str.Substring(lt, str.Length-lt);
}
}
}
return retval;
}
public string StringLeft(string str, string count)
{
string retval = "";
double d = 0;
if (str != null && IsNumeric(count, ref d))
{
int i = (int) d;
if (i > 0)
{
if (i <= str.Length)
{
retval = str.Substring(0, i);
}
else
{
retval = str;
}
}
}
return retval;
}
public bool LogicalEq(string val1, string val2)
{
bool ret = false;
double d1 = 0;
double d2 = 0;
if (IsNumeric(val1, ref d1) && IsNumeric(val2, ref d2))
{
ret = d1 == d2;
}
else
{
ret = String.Compare(val1, val2, StringComparison.Ordinal) == 0;
}
return ret;
}
public bool IsNumeric(string val)
{
if (val == null)
{
return false;
}
double d = 0;
return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
public bool IsNumeric(string val, ref double d)
{
if (val == null)
{
return false;
}
return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
</code>
]]></msxsl:script>
</xsl:stylesheet>
|
|

October 18th, 2011, 10:45 AM
|
 |
Friend of Wrox
|
|
Join Date: Aug 2007
Posts: 2,128
Thanks: 1
Thanked 189 Times in 188 Posts
|
|
And how does that relate to the output you are expecting?
|
|

October 18th, 2011, 10:49 AM
|
|
Registered User
|
|
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
desired output
- <ns0:Nex895 xmlns:ns0="http://Nex895.schemas.Nex_895FFSchema">
- <Nex895_Header>
<DXS_05>0031045404</DXS_05>
</Nex895_Header>
- <Nex895_Header_1>
<Header1>*9273950007*DX*004020UCS*1623*0031045404* P</Header1>
</Nex895_Header_1>
<ST>ST*895*2098</ST>
<G87>G87*R*D*404457*404457*1</G87>
<LS>LS*0100</LS>
- <Loop1>
<G89_C>G89*1*0*CA</G89_C>
</Loop1>
- <Loop1>
<G89_C>G89*33**CA*****21.38</G89_C>
<G72_C>G72*499*02***-0.43</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*35**CA*****17.88</G89_C>
<G72_C>G72*499*02***-0.36</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*37**CA*****17.88</G89_C>
<G72_C>G72*499*02***-0.36</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*38**CA*****17.88</G89_C>
<G72_C>G72*499*02***-0.36</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*39**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*40**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*41**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*42**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*43**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*44**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*45**CA*****11.73</G89_C>
<G72_C>G72*499*02***-0.24</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*46**CA*****11.73</G89_C>
<G72_C>G72*499*02***-0.24</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*47**CA*****8.98</G89_C>
<G72_C>G72*499*02***-0.18</G72_C>
</Loop1>
- <Loop1>
<G89_C>G89*50**CA*****9.78</G89_C>
<G72_C>G72*499*02***-0.2</G72_C>
</Loop1>
<LE>LE*0100</LE>
<G84>G84*127</G84>
<G86>G86*0C59</G86>
<G85>G85*D6BB</G85>
<SE>SE*37*2098</SE>
- <Nex895_Footer>
<Footer>IEA*1623*1</Footer>
</Nex895_Footer>
</ns0:Nex895>
|
|

October 18th, 2011, 10:50 AM
|
|
Registered User
|
|
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
My XSLT
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 userCSharp" version="1.0" xmlns:ns0="http://Nex895.schemas.Nex_895FFSchema" xmlns:s0="http://Nex895.schemas.CTHQ895_FlatFileSchema" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/s0:CTHQ895" />
</xsl:template>
<xsl:template match="/s0:CTHQ895">
<xsl:variable name="var:v57" select="userCSharp:StringConcat("IEA" , string(CTHQ895_Trailer/Trailer_Child/text()))" />
<ns0:Nex895>
<Nex895_Header>
<xsl:variable name="var:v1" select="userCSharp:calDun(string(CTHQ895_Header/HeaderChild/text()))" />
<DXS_05>
<xsl:value-of select="$var:v1" />
</DXS_05>
</Nex895_Header>
<Nex895_Header_1>
<Header1>
<xsl:value-of select="CTHQ895_Header/HeaderChild/text()" />
</Header1>
</Nex895_Header_1>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v2" select="userCSharp:StringSubstring(string(CTHQ895_ Detail_Child1/text()) , "1" , "3")" />
<xsl:variable name="var:v3" select="userCSharp:StringLeft(string($var:v2) , "3")" />
<xsl:variable name="var:v4" select="userCSharp:LogicalEq(string($var:v3) , "ST*")" />
<xsl:if test="string($var:v4)='true'">
<xsl:variable name="var:v5" select="CTHQ895_Detail_Child1/text()" />
<ST>
<xsl:value-of select="$var:v5" />
</ST>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v6" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v7" select="userCSharp:StringSubstring($var:v6 , "1" , "3")" />
<xsl:variable name="var:v8" select="userCSharp:StringLeft(string($var:v7) , "3")" />
<xsl:variable name="var:v9" select="userCSharp:LogicalEq(string($var:v8) , "G87")" />
<xsl:if test="string($var:v9)='true'">
<xsl:variable name="var:v10" select="CTHQ895_Detail_Child1/text()" />
<G87>
<xsl:value-of select="$var:v10" />
</G87>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v11" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v12" select="userCSharp:StringSubstring($var:v11 , "1" , "3")" />
<xsl:variable name="var:v13" select="userCSharp:StringLeft(string($var:v12) , "3")" />
<xsl:variable name="var:v14" select="userCSharp:LogicalEq(string($var:v13) , "G88")" />
<xsl:if test="string($var:v14)='true'">
<xsl:variable name="var:v15" select="CTHQ895_Detail_Child1/text()" />
<G88>
<xsl:value-of select="$var:v15" />
</G88>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v16" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v17" select="userCSharp:StringSubstring($var:v16 , "1" , "3")" />
<xsl:variable name="var:v18" select="userCSharp:StringLeft(string($var:v17) , "2")" />
<xsl:variable name="var:v19" select="userCSharp:LogicalEq(string($var:v18) , "LS")" />
<xsl:if test="string($var:v19)='true'">
<xsl:variable name="var:v20" select="CTHQ895_Detail_Child1/text()" />
<LS>
<xsl:value-of select="$var:v20" />
</LS>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v21" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v22" select="userCSharp:StringSubstring($var:v21 , "1" , "3")" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , "3")" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , "G89")" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , "G22")" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , "G72")" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , "G23")" />
<Loop1>
<xsl:if test="string($var:v24)='true'">
<xsl:variable name="var:v25" select="CTHQ895_Detail_Child1/text()" />
<G89_C>
<xsl:value-of select="$var:v21" />
</G89_C>
</xsl:if>
<xsl:if test="string($var:v26)='true'">
<xsl:variable name="var:v27" select="CTHQ895_Detail_Child1/text()" />
<G22_C>
<xsl:value-of select="$var:v21" />
</G22_C>
</xsl:if>
<xsl:if test="string($var:v28)='true'">
<xsl:variable name="var:v29" select="CTHQ895_Detail_Child1/text()" />
<G72_C>
<xsl:value-of select="$var:v21" />
</G72_C>
</xsl:if>
<xsl:if test="string($var:v30)='true'">
<xsl:variable name="var:v31" select="CTHQ895_Detail_Child1/text()" />
<G23_C>
<xsl:value-of select="$var:v21" />
</G23_C>
</xsl:if>
</Loop1>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v32" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v33" select="userCSharp:StringSubstring($var:v32 , "1" , "3")" />
<xsl:variable name="var:v34" select="userCSharp:StringLeft(string($var:v33) , "2")" />
<xsl:variable name="var:v35" select="userCSharp:LogicalEq(string($var:v34) , "LE")" />
<xsl:if test="string($var:v35)='true'">
<xsl:variable name="var:v36" select="CTHQ895_Detail_Child1/text()" />
<LE>
<xsl:value-of select="$var:v36" />
</LE>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v37" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v38" select="userCSharp:StringSubstring($var:v37 , "1" , "3")" />
<xsl:variable name="var:v39" select="userCSharp:StringLeft(string($var:v38) , "3")" />
<xsl:variable name="var:v40" select="userCSharp:LogicalEq(string($var:v39) , "G84")" />
<xsl:if test="string($var:v40)='true'">
<xsl:variable name="var:v41" select="CTHQ895_Detail_Child1/text()" />
<G84>
<xsl:value-of select="$var:v41" />
</G84>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v42" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v43" select="userCSharp:StringSubstring($var:v42 , "1" , "3")" />
<xsl:variable name="var:v44" select="userCSharp:StringLeft(string($var:v43) , "3")" />
<xsl:variable name="var:v45" select="userCSharp:LogicalEq(string($var:v44) , "G86")" />
<xsl:if test="string($var:v45)='true'">
<xsl:variable name="var:v46" select="CTHQ895_Detail_Child1/text()" />
<G86>
<xsl:value-of select="$var:v46" />
</G86>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v47" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v48" select="userCSharp:StringSubstring($var:v47 , "1" , "3")" />
<xsl:variable name="var:v49" select="userCSharp:StringLeft(string($var:v48) , "3")" />
<xsl:variable name="var:v50" select="userCSharp:LogicalEq(string($var:v49) , "G85")" />
<xsl:if test="string($var:v50)='true'">
<xsl:variable name="var:v51" select="CTHQ895_Detail_Child1/text()" />
<G85>
<xsl:value-of select="$var:v51" />
</G85>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="CTHQ895_Detail">
<xsl:variable name="var:v52" select="string(CTHQ895_Detail_Child1/text())" />
<xsl:variable name="var:v53" select="userCSharp:StringSubstring($var:v52 , "1" , "3")" />
<xsl:variable name="var:v54" select="userCSharp:StringLeft(string($var:v53) , "2")" />
<xsl:variable name="var:v55" select="userCSharp:LogicalEq(string($var:v54) , "SE")" />
<xsl:if test="string($var:v55)='true'">
<xsl:variable name="var:v56" select="CTHQ895_Detail_Child1/text()" />
<SE>
<xsl:value-of select="$var:v56" />
</SE>
</xsl:if>
</xsl:for-each>
<Nex895_Footer>
<Footer>
<xsl:value-of select="$var:v57" />
</Footer>
</Nex895_Footer>
</ns0:Nex895>
</xsl:template>
<msxsl:script language="C#" implements-prefix="userCSharp"><![CDATA[
///*Uncomment the following code for a sample Inline C# function
//that concatenates two inputs. Change the number of parameters of
//this function to be equal to the number of inputs connected to this functoid.*/
public string calDun(string param1)
{
string dun=null;
if(param1 != null)
{
string[] words= param1.Split('*');
int counter=0;
foreach(string word in words)
{
counter++;
if(counter ==6)
{
dun= word;
break;
}
}
}
else
dun="";
return dun;
}
public string StringConcat(string param0, string param1)
{
return param0 + param1;
}
public string StringSubstring(string str, string left, string right)
{
string retval = "";
double dleft = 0;
double dright = 0;
if (str != null && IsNumeric(left, ref dleft) && IsNumeric(right, ref dright))
{
int lt = (int)dleft;
int rt = (int)dright;
lt--; rt--;
if (lt >= 0 && rt >= lt && lt < str.Length)
{
if (rt < str.Length)
{
retval = str.Substring(lt, rt-lt+1);
}
else
{
retval = str.Substring(lt, str.Length-lt);
}
}
}
return retval;
}
public string StringLeft(string str, string count)
{
string retval = "";
double d = 0;
if (str != null && IsNumeric(count, ref d))
{
int i = (int) d;
if (i > 0)
{
if (i <= str.Length)
{
retval = str.Substring(0, i);
}
else
{
retval = str;
}
}
}
return retval;
}
public bool LogicalEq(string val1, string val2)
{
bool ret = false;
double d1 = 0;
double d2 = 0;
if (IsNumeric(val1, ref d1) && IsNumeric(val2, ref d2))
{
ret = d1 == d2;
}
else
{
ret = String.Compare(val1, val2, StringComparison.Ordinal) == 0;
}
return ret;
}
public bool IsNumeric(string val)
{
if (val == null)
{
return false;
}
double d = 0;
return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
public bool IsNumeric(string val, ref double d)
{
if (val == null)
{
return false;
}
return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
]]></msxsl:script>
</xsl:stylesheet>
|
|

October 18th, 2011, 10:51 AM
|
|
Registered User
|
|
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
I am not able to post my xslt, I send you my existing one if anyone needs it. BBut I have an issue only in Loop1.
|
|

October 18th, 2011, 12:15 PM
|
 |
Wrox Staff
Points: 18,059, Level: 58 |
|
|
Join Date: May 2003
Posts: 1,906
Thanks: 62
Thanked 139 Times in 101 Posts
|
|
Hopefully I got the right reponses moderated and approved here. :)
__________________
Jim Minatel
Associate Publisher, WROX - A Wiley Brand
Did someone here help you? Click  on their post!
|
|

October 18th, 2011, 01:34 PM
|
 |
Wrox Author
|
|
Join Date: Apr 2004
Posts: 4,962
Thanks: 0
Thanked 292 Times in 287 Posts
|
|
I suggested earlier that the problem was that var:v28 wasn't equal to the string "true". From your later posting it appears that the value is likely to be a boolean. Comparing the boolean value true to the string "true" will return true, but comparing the boolean value true to the string "false" will also return true.
I'm afraid, though, this is just really ugly code and I am simply not motivated to help you debug it. Why are you calling external functions to do things that can so easily be done in native XSLT/XPath code? It's intrinsically error-prone because of the different type systems of the two languages, so your bugs are entirely self-inflicted.
__________________
Michael Kay
http://www.saxonica.com/
Author, XSLT 2.0 and XPath 2.0 Programmer\'s Reference
|
Similar Threads
|
| Thread |
Thread Starter |
Forum |
Replies |
Last Post |
| Looping |
ssaranam |
SQL Server 2005 |
2 |
April 17th, 2008 01:40 AM |
| looping |
mrjoka |
Classic ASP Basics |
1 |
September 26th, 2007 12:21 AM |
| Looping |
deepsea007 |
XSLT |
1 |
June 14th, 2007 12:13 PM |
| Looping..? |
dedex |
C# |
2 |
January 6th, 2005 11:24 PM |
| Looping. Please help....Urgent |
junemo |
PHP How-To |
0 |
July 20th, 2004 10:13 PM |
|
 |