XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Victoria LuSubject: 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 &lt;tps:c type="Tip"&gt; line?--22222'.

I also attached here a result file tips_xfer.xml.

Would you please help me out?

Thank you sooooo very much,
Victoria


Unknowntips.xml
xml source file

Unknowntips.xsl
xlst file

Unknowntip_xfer.xml
result file

Postnext
Alberto MassariSubject: How do I get rid of 'Tip' node?
Author: Alberto Massari
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()[. &gt;&gt; ../tps:c[@type='property name'][1] and . &lt;&lt; ../tps:c[@type='Tip'][1] ]">

This would extract each node that is after the first 'property name' and before the first 'Tip'.

Hope this helps,
Alberto

Postnext
Victoria LuSubject: 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()[. &gt;&gt; ../text()[preceding-sibling::tps:c[@type='property name'][1]] and . &lt;&lt; ../tps:c[@type='Tip'][1]]">

But it doesn't work. Could you let me know what's wrong?



Postnext
Alberto MassariSubject: How do I get rid of 'Tip' node?
Author: Alberto Massari
Date: 04 Jun 2009 11:46 AM
Hi Victoria,
the >> operator works against a single node, so you have to add a [1] after the ../text()[...] expression.

Alberto

Postnext
Victoria LuSubject: 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?

Thanks again.


Postnext
Alberto MassariSubject: How do I get rid of 'Tip' node?
Author: Alberto Massari
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]

Alberto

Postnext
Victoria LuSubject: How do I get rid of 'Tip' node?
Author: Victoria Lu
Date: 04 Jun 2009 01:04 PM
That's great idea!

But the first c: <tps:c type="Semi-bold">Doria Pamphilj<tps:s/></tps:c>
wouldn't copy in somhow.

Postnext
Alberto MassariSubject: How do I get rid of 'Tip' node?
Author: Alberto Massari
Date: 04 Jun 2009 02:51 PM
In that case we will have to pick as reference the previous node:

../tps:c[@type='property name'][1]/following-sibling::tps:c[1]/preceding-sibling::*[1]

Alberto

Posttop
Victoria LuSubject: 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!

Many thanks again, Al!

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.