This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A simple basic question


[Philip Mak]

> I looked at various XSL guides, but I still can't figure out how to
> transform this:
>
> <document>
> <paragraph>Here is a <bold>bold</bold> word.</paragraph>
> <paragraph>Here is an <italic>italic</italic> word.</paragraph>
> </document>
>
> into this:
>
> <body>
> <p>Here is a <b>bold</b> word.</p>
> <p>Here is an <i>italic</i> word.</p>
> </document>
>

This result isn't literally possible since it is not well-formed, but I take
it that you really meant to close with </body> instead.

> The part I have trouble with is the <bold> and <italic>. The thing is
> that they could appear anywhere in the document; they're not part of a
> rigid structure. It seems that when I use <xsl:value-of
> select="paragraph">, the <bold> and <italic> tags inside just get
> stripped out.
>

That's natural since the purpose of value-of  is to get the text content.
Instead, you have to supply the b and i elements yourself.  Exactly how may
depend on just what else you want to do, but here's a stylesheet fragment
that shows how you can do it.  It depends on the built-in template - that
handles all elements in the absence of other templates - to get all the
text, and the stylesheet adds the p, b, and i elements where needed.

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

<xsl:template match='paragraph'>
 <p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match='bold'>
 <b><xsl:apply-templates/></b>
</xsl:template>

<xsl:template match='italic'>
 <i><xsl:apply-templates/></i>
</xsl:template>

Cheers,

Tom P


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]