xsl-list
[Top] [All Lists]

transformation of narrative documents with nested elements

2005-01-16 11:26:54
Hello,
I am an xml-xsl newbie, and I'm writing some xsl templates for a small CMS that 
I'm coding,
using PHP(+Dom extension) and MySql. At the moment i have some problems in the html transformation of this file called news_list.xml.
consider the following xml source:
-------------------------------------------------
1  <?xml version="1.0" encoding="iso-8859-1"?>
2  <news_list>
3
4  <!-- other news -->
5
6   <news id="1" topic="a_topic">
7    <title lang="en"> The English title </title>
8    <title lang="it"> the Italian title </title>
9 <author> me </author> 11 <date lang="en" day="16" month="January" year="2005"/> 12 <date lang="it" day="16" month="Gennaio" year="2005"/> 13
14    <text lang="en">
15    <bold>This is a bold text </bold>
16    <emph> This is an italic text  </emph>
17 <bold>this is <emph> an italic text nested</emph> inside a bold text </bold> <!-- here is my problem -->
18    </text>
19    <text lang="it">
20 bla bla bla in italian... 21 </text> 22 23 </news>
24    <!-- other news -->
25 </news_list>
--------------------------------------------------

I would like to transform this in html, according to the following goals:

* I have to select only the news where an English title is available

* I have to transform all the elements inside the English description,
and they may occur as nested elements, as in line 17: X PATH: /news_list/news/description[lang='it']/bold/emph at the moment i wrote this stylesheet, that does not achieve the second goal: i have a correct output for line 15 and 16, but i have no output for line 17

--------------------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="html" encoding="iso-8859-1"/>

 <xsl:template match="/">
  <div class="news_list">
    <xsl:apply-templates select="/news_list/news"/>
  </div>
 </xsl:template>
<xsl:template match="/news_list/news">
   <xsl:if test="title[(_at_)lang='en']">
     <xsl:choose>
       <xsl:when test="position()=1">
        <div class="first_news">
         <xsl:call-template name="news_en"/><br/>
        </div>
       </xsl:when>
       <xsl:otherwise>
        <div class="news">
         <xsl:call-template name="news_en"/><br/>
        </div>
       </xsl:otherwise>
     </xsl:choose>
</xsl:if> </xsl:template>

  <xsl:template name="news_en">
    <sup id="position_number">
     <xsl:value-of select="position()"/>
     </sup>
     <big class="news_title"><xsl:value-of 
select="title[(_at_)lang='en']"/></big>
     <div class="text_en">
       <xsl:apply-templates select="text[(_at_)lang='en']"/>
     </div>
  </xsl:template>

  <xsl:template match="text[(_at_)lang='en']">
    <xsl:apply-templates/>
  </xsl:template>
<xsl:template match="//bold">
    <xsl:element name="strong">
      <xsl:value-of select="."/>
</xsl:element> </xsl:template>

  <xsl:template match="//emph">
    <xsl:element name="i">
      <xsl:value-of select="."/>
</xsl:element> </xsl:template>

</xsl:stylesheet>
--------------------------------------------------
I tested this stylesheet also with xslproc, so i think this is not a problem
of the PhpDom implementation, but a problem in my XPATH sintax.....

Thank you in advance for your attention,

_Andrea




--~------------------------------------------------------------------
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>
--~--