xsl-list
[Top] [All Lists]

RE: [xsl] Using attributes with XPath

2006-08-23 22:07:38
Jackie,
If you want to write templates for common attributes, you can
distinguish them in two ways (XSLT 1.0).

1. use the mode attributes in the xsl:apply-templates and
xsl:template. This will single out the attribute for particular
transformation for each instance. In your case it would mean a
template for the list/@type attribute and one for each other
instance. You will need to think of your tranformation in catagories
(common transformation vs. uncommon). Use a general template for the
common, and particular templates for what is not common.

<xsl:apply-templates select="@type" mode="list_parent"/>

<xsl:template match="@type" mode="list_parent">
<!-- your cool code here for a list/@type transformation -->
</xsl:template>

2. You can get fancy by using a param and a single template for a
common attribute.

<xsl:apply-templates select="@type">
  <xsl:with-param name="parent_x" select="local-name()"/>
</xsl:apply-templates>

<xsl:template match="@type">
  <xsl:param name="parent_x"/>
  <xsl:choose>
    <xsl:when test="string($parent_x)='list'">
<!-- cool code here for list/@type -->
    </xsl:when>
    <xsl:otherwise>
<!-- cool code here for all the rest -->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>


Hope this helps.

Mike Ferrando
Library Technician
Library of Congress
Washington, DC
202-707-4454


--- Jacqueline Radebaugh <jrad(_at_)loc(_dot_)gov> wrote:

Hello:

Thank you very much for your help.  I revised my code so that I
created two templates for the attributes of the <list> element.  It
looks like:

<!-- list[parent::description] -->
<xsl:template match="list[parent::description]">
<fo:list-block>
  <xsl:apply-templates/>
 </fo:list-block>
</xsl:template>

<xsl:template match="@type[parent::list]">
<fo:inline  font-size="10pt" font-weight="normal"> 
<xsl:apply-templates/>   
  </fo:inline>
</xsl:template>

<xsl:template match="@mark[parent::list]">
<fo:inline  font-size="10pt" font-weight="normal"> 
<xsl:apply-templates/>   
  </fo:inline>
</xsl:template>

<xsl:template match="item[parent::list]">
<fo:list-item>
 <fo:list-item-label>
 <fo:block>?</fo:block>
 </fo:list-item-label>
 <fo:list-item-body>
 <fo:block>
 <xsl:apply-templates/>
 </fo:block>
 </fo:list-item-body>
 </fo:list-item>
</xsl:template>

I am still obtaining no output of the list.  However, when I take
the attributes off of the <list> element in my source code, i.e., 

<list>
<item>- The item contains more than one language one of which may
be a sign language</item>
<item>- The item is or includes a translation</item>
<item>- The language of the summaries, abstracts, or accompanying
material differs from the language of the main item</item>
<item>- The language of a table of contents differs from the
language of the main item</item>
</list>

my XSLT code works.   What I am still doing wrong?  It is
definitely related to the attributes of <list> (i.e., 
type="marked" mark="*").


Thank you very much for your help!

Best wishes,




Jackie Radebaugh

Library of Congress
Network Development & MARC Standards Office
Washington, DC
USA
Phone:  +1-202-707-1153
FAX:  +1-202-707-0115
E-Mail:  jrad(_at_)loc(_dot_)gov


mike(_at_)saxonica(_dot_)com 08/22/06 4:27 PM >>>

<xsl:template match="list">
<fo:list-block>
  <xsl:apply-templates select="@* 

That will apply-templates to the attributes of the list element,
but if
you've written any template rules that match attributes, you
haven't shown
them to us.


| *[contains(@type, 
$my_version) or string-length(@type)=0] | text()"/>  

That will match children of the list element that have a type
attribute
satisfying certain conditions, but in the XML you showed us, no
children of
the list element have a type attribute.

| text()"/>  

That will match text node children of the list element, but in the
data you
showed us, the only text node children of the list element were
whitespace.

Michael Kay
http://www.saxonica.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>
--~--




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




__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.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>
--~--