xsl-list
[Top] [All Lists]

Re: match string

2004-10-20 05:39:37
Zsolt Szabó 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



<Prev in Thread] Current Thread [Next in Thread>