developer777
asked on
ned help on XSLT sequence in the loop
If i send the input is
1. Lunch and 'BreakFast' the out put should be =
BreakFast
lunch
2. 'BreakFast' and Lunch the out put should be
BreakFast
lunch
3. Lunch and Dinner the out put should be
Lunch
Dinner
4. Dinner and Lunch the out put should be
Lunch
Dinner
I alway have 2 field in the input. I dont get a combination Breakfast and Dinner.
Thank you
1. Lunch and 'BreakFast' the out put should be =
BreakFast
lunch
2. 'BreakFast' and Lunch the out put should be
BreakFast
lunch
3. Lunch and Dinner the out put should be
Lunch
Dinner
4. Dinner and Lunch the out put should be
Lunch
Dinner
I alway have 2 field in the input. I dont get a combination Breakfast and Dinner.
Thank you
<xsl:for-each select="meal">
<xsl:if test="TYPE = 'BreakFast'">
<BeginDate>
<xsl:value-of select="concat('_ ',TYPE)"/>
</BeginDate>
</xsl:if>
<xsl:if test="DTM01 = 'Dinner'">
<EndDate>
<xsl:value-of select="concat('_',TYPE)"/>
</EndDate>
</xsl:if>
<xsl:if test="DTM01 = 'Lunch'">
<EndDate>
<xsl:value-of select="concat('_',TYPE)"/>
</EndDate>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:for-each>
ASKER
updated points
ASKER
help please
you can put contains() in the tests, so you need two tests, preferably in when clauses
<xsl
<xsl
<xsl:choose>
<xsl:when test="contains(translate(., 'LUNCH', 'lunch'), 'lunch') and contains(translate(., 'DINER', 'diner'),'dinner')">
<xsl:text>Lunch and Dinner</xsl:text>
</xsl:when>
<xsl:when test="contains(translate(., 'LUNCH', 'lunch'), 'lunch') and contains(translate(., 'BREAKFST', 'breakfst'),'breakFast ')">
<xsl:text>BreakFast and lunch</xsl:text>
</xsl:when>
</xsl:choose>
The translate() function I used for making the serach for you keywords, case-insensitive
Note: sending 4 follow ups in a minute will not make you get a quicker answer
Note: sending 4 follow ups in a minute will not make you get a quicker answer
ASKER
I think I did not ask the question properly.
meal can occurs maximun of 2 times. This will run the loop 2 times., If i need to write in c, or java
isLunch = false;
isBreakFast = false;
isDinner = false;
string bf= null;
string lunch = null;
string dinner= null;
for() // runs 2
{
If (meal.equals("BreakFast")
{
isBreakFast = true;
bf = meal;
}
If (meal.equals("lunch")
{
IsLunch = true;
lunch = meal;
}
If (meal.equals("Dinner")
{
isDinner = true;
dinner = meal;
}
}/ end loop.
If(isDinner)
{
println(lunch); //new line
print(dinner); //new line
}
If(isBf)
{
print(isBreakFast ); //new line
println(lunch); //new line
}
I am loking some thing similar to this in XSLT.
Note: I am in hurry, Today is a ruch day. sorry for the updates
Thank you
meal can occurs maximun of 2 times. This will run the loop 2 times., If i need to write in c, or java
isLunch = false;
isBreakFast = false;
isDinner = false;
string bf= null;
string lunch = null;
string dinner= null;
for() // runs 2
{
If (meal.equals("BreakFast")
{
isBreakFast = true;
bf = meal;
}
If (meal.equals("lunch")
{
IsLunch = true;
lunch = meal;
}
If (meal.equals("Dinner")
{
isDinner = true;
dinner = meal;
}
}/ end loop.
If(isDinner)
{
println(lunch); //new line
print(dinner); //new line
}
If(isBf)
{
print(isBreakFast ); //new line
println(lunch); //new line
}
I am loking some thing similar to this in XSLT.
Note: I am in hurry, Today is a ruch day. sorry for the updates
Thank you
You are in a hurry, OK, please ask the right question from the start then
Please explain what you want, do I really have to go out and interprete java code to get what you need?
Please explain what you want, do I really have to go out and interprete java code to get what you need?
Listen, this forum is about XSLT
- XSLT requires a completely different approach then procedural Javacode, so you procedural java code means nothing in this context
- input to XSLT is XML, I haven't( seen any XML so far
So please show the XML you start from or some examples of XML
based on that, show what you want as an output.
If you are really stressed and in a hurry, better learn to ask questions the right way
- XSLT requires a completely different approach then procedural Javacode, so you procedural java code means nothing in this context
- input to XSLT is XML, I haven't( seen any XML so far
So please show the XML you start from or some examples of XML
based on that, show what you want as an output.
If you are really stressed and in a hurry, better learn to ask questions the right way
ASKER
I am sorry.
I have one xml element, that can repeat 2 or more times. Possible values are Breakfast, lunch, or dinner.
if i loop through these by for each, the out put would be in the same order as input. But my requirement need a sequence.
input 1:
<ROOT>
<Meal>lunch</Meal>
<Meal>Breakfast</Meal>
</ROOT>
Out put should be always breakfast first if it is with lunch. ===>
breakfast
luncn
======
input 1:
<ROOT>
<Meal>Dinner</Meal>
<Meal>Lunch</Meal>
</ROOT>
Out put should be always Lunch first if it is with dinner. ===>
luncn
dinner
This would help
I have one xml element, that can repeat 2 or more times. Possible values are Breakfast, lunch, or dinner.
if i loop through these by for each, the out put would be in the same order as input. But my requirement need a sequence.
input 1:
<ROOT>
<Meal>lunch</Meal>
<Meal>Breakfast</Meal>
</ROOT>
Out put should be always breakfast first if it is with lunch. ===>
breakfast
luncn
======
input 1:
<ROOT>
<Meal>Dinner</Meal>
<Meal>Lunch</Meal>
</ROOT>
Out put should be always Lunch first if it is with dinner. ===>
luncn
dinner
This would help
Thank you, this really helps.
You made a mistake by posting java code.
because you don't solve this in XSLT, using loops and variables
You can XPath directly in the XML structure
You made a mistake by posting java code.
because you don't solve this in XSLT, using loops and variables
You can XPath directly in the XML structure
<xsl:template match="ROOT">
<xsl:choose>
<xsl:when test="contains(translate(Meal, 'LUNCH', 'lunch'), 'lunch') and contains(translate(Meal, 'DINER', 'diner'),'dinner')">
<xsl:text>Lunch and Dinner</xsl:text>
</xsl:when>
<xsl:when test="contains(translate(Meal, 'LUNCH', 'lunch'), 'lunch') and contains(translate(Meal, 'BREAKFST', 'breakfst'),'breakFast ')">
<xsl:text>BreakFast and lunch</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
If you need them on two lines, you could do something like this
<xsl:text>Lunch Dinner </xsl:text >
<xsl:text>Lunch Dinner
and there is a bug, sorry
<xsl:when test="contains(translate(M eal, 'LUNCH', 'lunch'), 'lunch') and contains(translate(Meal, 'BREAKFST', 'breakfst'),'breakFast ')">
should be
<xsl:when test="contains(translate(M eal, 'LUNCH', 'lunch'), 'lunch') and contains(translate(Meal, 'BREAKFST', 'breakfst'),'breakfast ')">
<xsl:when test="contains(translate(M
should be
<xsl:when test="contains(translate(M
ASKER
I am geting this error
A sequence of more than one item is not allowed as the first argument of translate()
Thank you
A sequence of more than one item is not allowed as the first argument of translate()
Thank you
yep, sorry, that is a mistake, try this
<xsl:template match="ROOT">
<xsl:choose>
<xsl:when test="Meal[contains(translate(., 'LUNCH', 'lunch'), 'lunch')] and Meal[contains(translate(., 'DINER', 'diner'),'dinner')]">
<xsl:text>Lunch and Dinner</xsl:text>
</xsl:when>
<xsl:when test="Meal[contains(translate(., 'LUNCH', 'lunch'), 'lunch')] and Meal[contains(translate(., 'BREAKFST', 'breakfst'),'breakfast')]">
<xsl:text>BreakFast and lunch</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Than you. It works. I am accepting solution. Can you explain me the what the does?
test="Meal[contains(lower- case(.), 'lunch')] and Meal[contains(lower-case(. ),'dinner' )]">
Is it comparing every element in the NodeList
Is there anyway we can do with out hard coding the values in the output.
Thank you
test="Meal[contains(lower-
Is it comparing every element in the NodeList
Is there anyway we can do with out hard coding the values in the output.
Thank you
ASKER
Thank you for your time.
welcome
Meal[contains(lower-case(. ), 'lunch')]
is an XPath expression that selects the Meal child element that has a content that contains 'lunch' when lower-cased
In an test expression this will reult in false() if there isn't such a Meal child, or true() when there is
test="Meal[contains(lower- case(.), 'lunch')] and Meal[contains(lower-case(. ),'dinner' )]">
checks whether there is a Meal child with 'lunch' AND one with 'dinner'. I made order not important that way
Which values would you like to not 'hardcode'?
Meal[contains(lower-case(.
is an XPath expression that selects the Meal child element that has a content that contains 'lunch' when lower-cased
In an test expression this will reult in false() if there isn't such a Meal child, or true() when there is
test="Meal[contains(lower-
checks whether there is a Meal child with 'lunch' AND one with 'dinner'. I made order not important that way
Which values would you like to not 'hardcode'?
ASKER