Wrox Programmer Forums
Go Back   Wrox Programmer Forums > XML > XSLT
|
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
 
Old October 17th, 2011, 02:44 PM
Registered User
 
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default 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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , &quot;3&quot;)" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , &quot;G89&quot;)" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , &quot;G22&quot;)" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , &quot;G72&quot;)" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , &quot;G23&quot;)" />
<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>
 
Old October 18th, 2011, 04:03 AM
mhkay's Avatar
Wrox Author
 
Join Date: Apr 2004
Posts: 4,962
Thanks: 0
Thanked 292 Times in 287 Posts
Default

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
 
Old October 18th, 2011, 04:03 AM
samjudson's Avatar
Friend of Wrox
 
Join Date: Aug 2007
Posts: 2,128
Thanks: 1
Thanked 189 Times in 188 Posts
Default

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.
__________________
/- Sam Judson : Wrox Technical Editor -/

Think before you post: What have you tried?
 
Old October 18th, 2011, 10:37 AM
Registered User
 
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default

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(&quot;IEA&quot; , 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()) , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v3" select="userCSharp:StringLeft(string($var:v2) , &quot;3&quot;)" />
<xsl:variable name="var:v4" select="userCSharp:LogicalEq(string($var:v3) , &quot;ST*&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v8" select="userCSharp:StringLeft(string($var:v7) , &quot;3&quot;)" />
<xsl:variable name="var:v9" select="userCSharp:LogicalEq(string($var:v8) , &quot;G87&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v13" select="userCSharp:StringLeft(string($var:v12) , &quot;3&quot;)" />
<xsl:variable name="var:v14" select="userCSharp:LogicalEq(string($var:v13) , &quot;G88&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v18" select="userCSharp:StringLeft(string($var:v17) , &quot;2&quot;)" />
<xsl:variable name="var:v19" select="userCSharp:LogicalEq(string($var:v18) , &quot;LS&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , &quot;3&quot;)" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , &quot;G89&quot;)" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , &quot;G22&quot;)" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , &quot;G72&quot;)" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , &quot;G23&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v34" select="userCSharp:StringLeft(string($var:v33) , &quot;2&quot;)" />
<xsl:variable name="var:v35" select="userCSharp:LogicalEq(string($var:v34) , &quot;LE&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v39" select="userCSharp:StringLeft(string($var:v38) , &quot;3&quot;)" />
<xsl:variable name="var:v40" select="userCSharp:LogicalEq(string($var:v39) , &quot;G84&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v44" select="userCSharp:StringLeft(string($var:v43) , &quot;3&quot;)" />
<xsl:variable name="var:v45" select="userCSharp:LogicalEq(string($var:v44) , &quot;G86&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v49" select="userCSharp:StringLeft(string($var:v48) , &quot;3&quot;)" />
<xsl:variable name="var:v50" select="userCSharp:LogicalEq(string($var:v49) , &quot;G85&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v54" select="userCSharp:StringLeft(string($var:v53) , &quot;2&quot;)" />
<xsl:variable name="var:v55" select="userCSharp:LogicalEq(string($var:v54) , &quot;SE&quot;)" />
<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>
 
Old October 18th, 2011, 10:45 AM
samjudson's Avatar
Friend of Wrox
 
Join Date: Aug 2007
Posts: 2,128
Thanks: 1
Thanked 189 Times in 188 Posts
Default

And how does that relate to the output you are expecting?
__________________
/- Sam Judson : Wrox Technical Editor -/

Think before you post: What have you tried?
 
Old October 18th, 2011, 10:49 AM
Registered User
 
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default 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>
 
Old October 18th, 2011, 10:50 AM
Registered User
 
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default 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(&quot;IEA&quot; , 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()) , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v3" select="userCSharp:StringLeft(string($var:v2) , &quot;3&quot;)" />
<xsl:variable name="var:v4" select="userCSharp:LogicalEq(string($var:v3) , &quot;ST*&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v8" select="userCSharp:StringLeft(string($var:v7) , &quot;3&quot;)" />
<xsl:variable name="var:v9" select="userCSharp:LogicalEq(string($var:v8) , &quot;G87&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v13" select="userCSharp:StringLeft(string($var:v12) , &quot;3&quot;)" />
<xsl:variable name="var:v14" select="userCSharp:LogicalEq(string($var:v13) , &quot;G88&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v18" select="userCSharp:StringLeft(string($var:v17) , &quot;2&quot;)" />
<xsl:variable name="var:v19" select="userCSharp:LogicalEq(string($var:v18) , &quot;LS&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v23" select="userCSharp:StringLeft(string($var:v22) , &quot;3&quot;)" />
<xsl:variable name="var:v24" select="userCSharp:LogicalEq(string($var:v23) , &quot;G89&quot;)" />
<xsl:variable name="var:v26" select="userCSharp:LogicalEq(string($var:v23) , &quot;G22&quot;)" />
<xsl:variable name="var:v28" select="userCSharp:LogicalEq(string($var:v23) , &quot;G72&quot;)" />
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string($var:v23) , &quot;G23&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v34" select="userCSharp:StringLeft(string($var:v33) , &quot;2&quot;)" />
<xsl:variable name="var:v35" select="userCSharp:LogicalEq(string($var:v34) , &quot;LE&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v39" select="userCSharp:StringLeft(string($var:v38) , &quot;3&quot;)" />
<xsl:variable name="var:v40" select="userCSharp:LogicalEq(string($var:v39) , &quot;G84&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v44" select="userCSharp:StringLeft(string($var:v43) , &quot;3&quot;)" />
<xsl:variable name="var:v45" select="userCSharp:LogicalEq(string($var:v44) , &quot;G86&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v49" select="userCSharp:StringLeft(string($var:v48) , &quot;3&quot;)" />
<xsl:variable name="var:v50" select="userCSharp:LogicalEq(string($var:v49) , &quot;G85&quot;)" />
<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 , &quot;1&quot; , &quot;3&quot;)" />
<xsl:variable name="var:v54" select="userCSharp:StringLeft(string($var:v53) , &quot;2&quot;)" />
<xsl:variable name="var:v55" select="userCSharp:LogicalEq(string($var:v54) , &quot;SE&quot;)" />
<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>
 
Old October 18th, 2011, 10:51 AM
Registered User
 
Join Date: Oct 2011
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default

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.
 
Old October 18th, 2011, 12:15 PM
jminatel's Avatar
Wrox Staff
Points: 18,059, Level: 58
Points: 18,059, Level: 58 Points: 18,059, Level: 58 Points: 18,059, Level: 58
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: May 2003
Posts: 1,906
Thanks: 62
Thanked 139 Times in 101 Posts
Default

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!
 
Old October 18th, 2011, 01:34 PM
mhkay's Avatar
Wrox Author
 
Join Date: Apr 2004
Posts: 4,962
Thanks: 0
Thanked 292 Times in 287 Posts
Default

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





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.