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