Subject:How do I get rid of 'Tip' node? Author:Victoria Lu Date:02 Jun 2009 02:18 PM
Hello,
I need translate a source code attached here as tips.xml.
There are three <tps:context type="Single Page Sight" >. under each of them, I need to break each child <tps:p type="tx1"> to several pieces.
I have a problem to copy everything after <tps:c type="property name"> and text() eg. 'This bona fide patrician...', and before the first <tps:c type="Tip"> into a p tag.
But somehow the first <tps:c type="Tip"> always be copied over, which I have already copied to next lines with a different p type.
What's worng in my code as attched here as tips.xsl? The condition I marked there as '22222--How can I get rid of above extra <tps:c type="Tip"> line?--22222'.
Subject:How do I get rid of 'Tip' node? Author:(Deleted User) Date:04 Jun 2009 10:29 AM
Hi Victoria,
the XPath expression you wrote will pick the first Tip node because it selects all the nodes that have at least one Semi-Bold before and one Tip after, and the first Tip is followed by a second one, so it is satisfies such condition.
As you are already using XSLT 2.0, I would use the "between" operator to express your condition, like in this instruction:
<xsl:apply-templates select="tps:p[@type='tx1']/node()[. >> ../tps:c[@type='property name'][1] and . << ../tps:c[@type='Tip'][1] ]">
This would extract each node that is after the first 'property name' and before the first 'Tip'.
Subject:How do I get rid of 'Tip' node? Author:Victoria Lu Date:04 Jun 2009 11:22 AM
Hi Al,
That's what I wanted! So cool!
But I don't want the text() be copied over, which followed the node tps:c[@type='property name'] is "This bona fide patrician palace is still home...".
So I modified your condition to:
<xsl:apply-templates select="tps:p[@type='tx1']/node()[. >> ../text()[preceding-sibling::tps:c[@type='property name'][1]] and . << ../tps:c[@type='Tip'][1]]">
But it doesn't work. Could you let me know what's wrong?
Subject:How do I get rid of 'Tip' node? Author:Victoria Lu Date:04 Jun 2009 12:12 PM
Hi Al,
You are great! Thank you so much!
Here are the results I got:
1. when I added [1] after, the text still copied over;
2. when I changed to [2] after, the text is gone but copied <tps:s/> over which followed the text and I don't wanted it;
3. when I changed [3] after, I got a prefect result.
This would put me on a risky. Sometimes they have a <tps:s/> to follow a text, and sometimes may not. How do I not hard code this [n] there?
Subject:How do I get rid of 'Tip' node? Author:(Deleted User) Date:04 Jun 2009 12:56 PM
Hi Victoria,
if the purpose is to get the first tps:c following the 'property name', you can directly write ../tps:c[@type='property name'][1]/following-sibling::tps:c[1]
Subject:How do I get rid of 'Tip' node? Author:Victoria Lu Date:04 Jun 2009 03:24 PM
Wow, how prefect that works out!
You are the best! I learnt a lot from you.
I love you, Al and love your little beautiful princess, too!
She's so cute!