[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: match string

Subject: Re: match string
From: Anton Triest <anton@xxxxxxxx>
Date: Wed, 20 Oct 2004 14:39:37 +0200
matches string
Zsolt Szabs wrote:

I have modified my template, because like you said I had lost the markup in para[1]

1.
<xsl:template match="chapter/section[1]/para[1]/*[1]/text()[1]" priority="1">


2.
<xsl:template match="para">

but now the output of the first paragraph looks like>
<p> <p> <b> Three words are </b> here </p> </p>

it is because I have a template for the first paragraphs first tag text()
and a template for every paragraph, with matches para[1] too

Yes (like David says): in the template matching text() you don't need a p element node anymore.



how can I solve this problem?


On Oct 19, 2004, at 3:04 PM, David Carlisle wrote:

Also, in this case you probably want to match on the first text node of
the first para rather than the para itself as in

<xsl:template match="chapter/section[1]/para[1]//text()[1]" priority="1">

As you have it, you are doing string operations on the entire paragraph
text which means that any element markup within the paragraph will be
lost.

There's another problem. I thought "//text()[1]" would give "the first text node (inside that first paragraph) however deeply nested in any markup". But instead, it seems to return the first text node of *all* the nested markup. Example:

<input>
<para>A paragraph without any markup</para>
<para>A paragraph with some <i>markup</i> inside</para>
<para>A paragraph with some <b><i>nested</i> markup</b></para>
<para><em>This is a special case</em>: paragraph starts with markup</para>
<para><em>This</em> is difficult: only the first word has markup</para>
</input>


<output>
<para><first>A paragraph without </first>any markup</para>
<para><first>A paragraph with </first>some<i><first>markup</first></i> inside</para>
<para><first>A paragraph with </first>some<b><i><first>nested</first></i><first>markup</first></b></para>
<para><em><first>This is a </first>special case</em><first>: paragraph starts </first>with markup</para>
<para><em><first>This</first></em><first>is difficult: only </first>the first word has markup</para>
</output>


Zsolt, I see that you changed this to "/*[1]/text()[1]" but that gives

<output>
<para>A paragraph without any markup</para>
<para>A paragraph with some <i><first>markup</first></i> inside</para>
<para>A paragraph with some <b><i>nested</i><first>markup</first></b></para>
<para><em><first>This is a </first>special case</em>: paragraph starts with markup</para>
<para><em><first>This</first></em> is difficult: only the first word has markup</para>
</output>


your solution works, but it is to complicated for me. I need time to exactly understand it.

Don't worry Zsolt, it's getting complicated for me too! :-) It think I also need some time to work this out


Best regards
Anton

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.