xsl-list
[Top] [All Lists]

RE: Re: how to translate XML with XHTML-formatted element to FO

2005-04-14 07:24:05
I remain puzzled over the idea that there are "escaped" HTML tags in your input 
XML file. They appear as ordinary HTML tags in my email. In order to proceed I 
will put this down to a different understanding of what "escaped" means. If I 
have misunderstood you, please clarify the matter further.

I have taken your input and output and written a stylesheet that will produce 
the expected output. Well, almost. In your input file you have the bold and 
italic tags nested in the Donald Duck entry, but they are not nested in the 
desired output you posted. I will assume that this is a typing error and go on 
to produce nested output as is suggested by the input document's structure.

Given all these caveats, this stylesheet produces what I think you want.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format";>
  <xsl:output method="xml" indent="yes" encoding="UTF-8" />
  <xsl:strip-space elements="*" />

  <xsl:template match="/">
    <fo:flow flow-name="xsl-region-body">
      <xsl:apply-templates />
    </fo:flow>
  </xsl:template>

  <xsl:template match="BOOKS">
  <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="BOOK">
    <fo:block>
      <fo:block space-before.optimum="1pt" space-after.optimum="2pt">
        <xsl:apply-templates />
      </fo:block>
    </fo:block>
  </xsl:template>

  <xsl:template match="AUTHOR">
    <fo:block>Author: <xsl:value-of select="." /></fo:block>
  </xsl:template>

  <xsl:template match="PRICE">
    <fo:block>Price : US$ <xsl:value-of select="." /></fo:block>
  </xsl:template>

  <xsl:template match="TITLE">
    <xsl:choose>
      <xsl:when test="child::*">
        <fo:block>Title : <xsl:apply-templates /></fo:block>
      </xsl:when>
      <xsl:otherwise>
        <fo:block>Title : <xsl:value-of select="." /></fo:block>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="b">
    <xsl:choose>
      <xsl:when test="child::*">
        <fo:inline font-weight="bold"><xsl:apply-templates /></fo:inline>
      </xsl:when>
      <xsl:otherwise>
        <fo:inline font-weight="bold"><xsl:value-of select="." /></fo:inline>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="i">
    <xsl:choose>
      <xsl:when test="child::*">
        <fo:inline font-style="italic"><xsl:apply-templates /></fo:inline>
      </xsl:when>
      <xsl:otherwise>
        <fo:inline font-weight="italic"><xsl:value-of select="." /></fo:inline>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
-- 
Charles Knell
cknell(_at_)onebox(_dot_)com - email



-----Original Message-----
From:     Magic Finger <magic(_dot_)finger(_at_)gmx(_dot_)de>
Sent:     Wed, 13 Apr 2005 08:46:07 +0100
To:       <ElektonikaMail@>
Cc:       <cknell(_at_)onebox(_dot_)com>
Subject:  Re: [xsl] how to translate XML with XHTML-formatted element to FO

Hello Charles,

the required output should be something like the following, where the
escaped HTML-tags (like the one for bold (<b>) and italic (<i>)
formatting) inside the <TITLE> element of input file should be
interpreted/translated as desired.

----------
OUTPUT:
----------
--- books.fo --->
  ...
  <fo:flow flow-name="xsl-region-body">
   <fo:block>
    <fo:block space-before.optimum="1pt" space-after.optimum="2pt">
     <fo:block>Author: Walt Disney</fo:block>
     <fo:block>Price : US$ 19.90</fo:block>
     <fo:block>Title : <fo:inline font-weight="bold">Donald Duck -
</fo:inline><fo:inline font-style="italic">The True
Story</fo:inline></fo:block>
    </fo:block>
    <fo:block space-before.optimum="1pt" space-after.optimum="2pt">
     <fo:block>Author: Matt Groening</fo:block>
     <fo:block>Price : US$ 25.00</fo:block>
     <fo:block>Title : <fo:inline font-weight="bold">Homer Simpson For
President</fo:inline></fo:block>
    </fo:block>
   </fo:block>
  </fo:flow>
  ...
<--- books.fo ---

---------
INPUT:
---------
 --- books.xml --->
 <BOOK>
   <AUTHOR>Walt Disney</AUTHOR>
   <PRICE>19.90</PRICE>
   <TITLE><b>Donald Duck - <i>The True
Story</i></b></TITLE>
 </BOOK>

 <BOOK>
   <AUTHOR>Matt Groening</AUTHOR>
   <PRICE>25.00</PRICE>
   <TITLE><b>Homer Simpson For President</b></TITLE>
 </BOOK>
   ...
 <--- books.xml ---

Best regards,
Maik


You have shown us your input, now how about some idea of what the output 
should be. I have read your post several times and I can't understand what 
problem you are trying to solve.

It may be that you need to process the document in stages or you may need 
advice on constructing a template. I just can't understand what you need 
using the information you have given.
-- 
Charles Knell
cknell(_at_)onebox(_dot_)com - email


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






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