[xsl] transformation of narrative documents with nested elements

Subject: [xsl] transformation of narrative documents with nested elements
From: Andrea Fiore <a.flow@xxxxxxxxxx>
Date: Sun, 16 Jan 2005 18:26:54 +0000
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[@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[@lang='en']"/></big>
     <div class="text_en">
       <xsl:apply-templates select="text[@lang='en']"/>
     </div>
  </xsl:template>

<xsl:template match="text[@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

Current Thread