xsl-list
[Top] [All Lists]

[xsl] Move elements to preceding parent

2009-06-14 10:54:04
Hi,
I don't have so much experience in xsl and have a task I found hard to tackle.
I am working with Saxon-B9.1 on the command line (XSLT 1.0 or 2.0 are OK).

My input is something like the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>
<body>
   <p dir="rtl">
      <span class="chapter">line1</span>
   </p>
   <p dir="rtl">&nbsp;&nbsp;<br />
   <span class="regular">line3.</span>
   <span class="italic">line4</span>
   <span class="regular">line5."</span>
   </p>
   <p dir="rtl">&nbsp;&nbsp;<br />
   <span class="regular">line6.</span>
   <br />
   <span class="regular">line7</span>
 </p>
 <p dir="rtl">&nbsp;&nbsp;<br />
   <span class="regular">line8.</span>
   <span class="regular">line9.</span>
 </p>
</body>
</html>


The reault output should be:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>
<body>
   <p dir="rtl">
      <span class="chapter">line1</span>
   </p>
   <p dir="rtl">&nbsp;&nbsp;<br />
          <span class="regular">line3.</span>
          <span class="italic">line4</span>
          <span class="regular">line5."</span>
   </p>
   <p dir="rtl">&nbsp;&nbsp;<br />
          <span class="regular">line6.</span>
          <br />
          <span class="regular">line7</span>
          <span class="regular">line8.</span>
          <span class="regular">line9.</span>
   </p>
</body>
</html>

For every span element that the class<>'chapter' verify that in every
p the last span element text ends with one character of .?"!
(paragraph ending char).
If it does, copy as is to the output.
Otherwise: Move the span elements from the next p to the current one
and remove the next p completely.

I tried doing it with following-sibling & for-each , but I'm not sure
it is the right approach.

Any help will be appreciated,
Thanks, Viente

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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