xsl-list
[Top] [All Lists]

Re: [xsl] applying templates to attribute value

2008-06-30 14:18:59
Ken,

Thanks for your quick reply. In fact, the select statement was what I started 
out with, but changed it to apply-templates in order to have the content itself 
match on the <b> and <br />. Doesn't apply templates force further matching of 
the matched node? Instead I am still getting the attribute value, untransformed.

Here is what I now have with your cyhanges, alongwith the output:
(I am using Altova).

XML: ==================================

<TEAMS_ASSET_FILE>
   <METADATA>
      <UOIS>
         <GT_ASSET_REQUEST_MD COVERLETTER_TEXT="This is a 
&lt;b&gt;test&lt;/b&gt; of the line break formatting&lt;br /&gt;. Did it work?" 
/>
      </UOIS>
    </METADATA>
</TEAMS_ASSET_FILE>

XSL: ==================================

<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; exclude-result-prefixes="fo">
<xsl:template match="TEAMS_ASSET_FILE">
   <xsl:apply-templates 
select="METADATA/UOIS/GT_ASSET_REQUEST_MD/@COVERLETTER_TEXT" />
</xsl:template>

<!-- formatting in the block -->
<xsl:template match="GT_ASSET_REQUEST_MD/@COVERLETTER_TEXT">
  <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="br">
  <fo:block> </fo:block>
</xsl:template>
<xsl:template match="b">
  <fo:inline font-weight="bold">
    <xsl:apply-templates />
  </fo:inline>
</xsl:template>

</xsl:stylesheet>

OUTPUT: ===============================

<?xml version="1.0" encoding="UTF-8"?>This is a &lt;b&gt;test&lt;/b&gt; of the 
line break formatting&lt;br /&gt;. Did it work?





--- On Mon, 6/30/08, G. Ken Holman <gkholman(_at_)CraneSoftwrights(_dot_)com> 
wrote:

From: G. Ken Holman <gkholman(_at_)CraneSoftwrights(_dot_)com>
Subject: Re: [xsl] applying templates to attribute value
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Monday, June 30, 2008, 4:24 PM
At 2008-06-30 12:41 -0700, mark bordelon wrote:
Here is the problem in a nutshell, how can I applying a
template to 
string content in an attributes value.

Attribute nodes are leaves of the tree.  To act on the
content you 
act on the node's value, unlike an element where you
push the 
children at your stylesheet for processing.

My specific digital asset management application has
HTML formatting 
in an attribute value that I have to transform into fo
formating. I 
have the formatting templates, but I cannot seem to
match them to 
the attribute value.

You are matching the attribute value, you just aren't
doing anything with it.

XML: ==================================

<TEAMS_ASSET_FILE>
   <METADATA>
      <UOIS>
         <GT_ASSET_REQUEST_MD
COVERLETTER_TEXT="This is a 
&lt;b&gt;test&lt;/b&gt; of the line
break formatting&lt;br /&gt;. 
Did it work?" />
      </UOIS>
    </METADATA>
</TEAMS_ASSET_FILE>

XSL: ==================================

<xsl:template match="TEAMS_ASSET_FILE">
   <xsl:apply-templates 

select="./METADATA/UOIS/GT_ASSET_REQUEST_MD/@COVERLETTER_TEXT"
/>

The "./" is redundant above.

</xsl:template>

<!-- formatting in the block -->
<xsl:template
match="//GT_ASSET_REQUEST_MD/@COVERLETTER_TEXT">

The "//" is redundant above.

  <xsl:apply-templates />

That statement "pushes the children of the node"
... there are no 
children of the attribute node because it is a leaf in the
tree and 
is attached to an element.  As a result, there is nothing
added to 
your result tree.

You want <xsl:value-of select="."/> to add
the value of the attribute 
to the result tree.

</xsl:template>
<xsl:template match="br">
  <fo:block> </fo:block>
</xsl:template>
<xsl:template match="b">
  <fo:inline font-weight="bold">
    <xsl:apply-templates
select="*|text()"/>

I suspect <xsl:apply-templates/> is sufficient here
as that is a 
synonym for <xsl:apply-templates
select="child::node()"/>  which is a 
synonym for <xsl:apply-templates 
select="*|text()|comment()|processing-instruction"/>

I hope this helps.

. . . . . . . . . . . Ken

--
Upcoming XSLT/XSL-FO hands-on courses:      Wellington, NZ
2009-01
World-wide corporate, govt. & user group XML, XSL and
UBL training
RSS feeds:     publicly-available developer resources and
training
G. Ken Holman                
mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd.         
http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999
(F:-0995)
Male Cancer Awareness Nov'07 
http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: 
http://www.CraneSoftwrights.com/legal


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

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