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]

Re: Another newbie problem...


This is one of those irritating fine points.  Your xml file has a default
namespace.  In xslt,  to match  those elements you need a prefix referring
to the element's namespace (same for attributes).  You don't have one
because (of course) you didn't use one in the source document.

The remedy is to specify one in the stylesheet.  And then you use
exclude-result-prefixes because you don't want that dummy prefix showing up
in the output.  So:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:dc="http://purl.org/dc/elements/1.1/";
xmlns:x="http://schema.upcast.com/content";
 exclude-result-prefixes='x'>

Next, you have to make sure to specify the namespace by using your new
prefix for all elements and attributes of the source document you want to
match or select on, like so:

<xsl:template match="/x:itemListInfo">
    <html>
        <table border='1' width="100%" cellspacing="0" cellpadding="1"
class="listTable">
            <tr><xsl:apply-templates
select="x:headerInfo/x:headerList/x:header" /></tr>
            <xsl:apply-templates select="x:itemList/x:item" />
        </table>
    </html>
</xsl:template>

If you go through the entire stylesheet and add the prefix everywhere, it
will work (I tried it).  It still may have errors, but they would be normal
errors, not these mysterious namespace errors.  Note that you do NOT have to
change the source document, since those elements are properly in that
namespace already.

Cheers,

Tom P

[Kevin Nardi]

> What I'm trying to do is create a table with a row of headers first, then
> one row for each item.  However, I don't get a table at all.  It jumps
> straight into the contents of each cell.  From what I understand of XSL,
it
> should process the itemListInfo element first, then the header elements,
and
> then the item elements.  It should then process one item child element for
> each header.
>
> Can anyone help me with this?  I would very much appreciate it.
> It's probably some stupid problem that I don't know enough to understand.
>
> <itemListInfo xmlns="http://schema.upcast.com/content";
> xmlns:dc="http://purl.org/dc/elements/1.1/";>
>     <checkInfo>
>         <idList/>
>     </checkInfo>
>     <headerInfo>
>         <sortBy>title</sortBy>
>         <sortOrder>ascending</sortOrder>
>         <headerList>
>             <header sort="true">
>                 <name>title</name>
>                 <title>Title</title>
>             </header>
>             <header sort="true">
>                 <name>identifier</name>
>                 <title>ID</title>
>             </header>
>             <header sort="true">
>                 <name>coverage</name>
>                 <title>Topics</title>
>             </header>
>             <header sort="true">
>                 <name>type</name>
>                 <title>Item Type</title>
>             </header>
>             <header sort="true">
>                 <name>uri</name>
>                 <title>Location</title>
>             </header>
>             <header sort="true">
>                 <name>creator</name>
>                 <title>Creator</title>
>             </header>
>             <header sort="true">
>                 <name>lastModified</name>
>                 <title>Last-Modified</title>
>             </header>
>             <header sort="true">
>                 <name>numComments</name>
>                 <title>Comments</title>
>             </header>
>         </headerList>
>     </headerInfo>
>     <itemList>
>         <item>
>             <dc:title>Item 1</dc:title>
>             <dc:identifier>atn</dc:identifier>
>             <dc:coverage>tia</dc:coverage>
>             <dc:type>BasicItem</dc:type>
>             <uri>http://10.10.9.32/DevPortal2/portal_catalog</uri>
>             <dc:creator>janette3</dc:creator>
>             <dc:date>2001-07-09 17:21:00</dc:date>
>             <comments>
>                 <num>0</num>
>             </comments>
>         </item>
>         <item>
>             <dc:title>Item 2</dc:title>
>             <dc:identifier>atnb</dc:identifier>
>             <dc:coverage>tia</dc:coverage>
>             <dc:type>BasicItem</dc:type>
>             <uri>http://10.10.9.32/DevPortal2/portal_catalog</uri>
>             <dc:creator>janette3</dc:creator>
>             <dc:date>2001-07-09 17:22:00</dc:date>
>             <comments>
>                 <num>0</num>
>             </comments>
>         </item>
>     </itemList>
> </itemListInfo>
>
> ----------------------------------------------------
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> xmlns:dc="http://purl.org/dc/elements/1.1/";
> xmlns="http://www.w3.org/TR/xhtml1/strict";>
>
> <xsl:output method="html" indent="yes" />
>
> <!-- DTML Variables -->
> <xsl:variable name="bUserIsAnonymous">false</xsl:variable>
> <xsl:variable name="bUserIsManager">true</xsl:variable>
> <xsl:variable name="bCheckboxes">true</xsl:variable>
> <xsl:variable name="bLinks">true</xsl:variable>
> <xsl:variable
>
name="urlThisPage">http://10.10.9.32/DevPortal2/User/kevin/tMyItems?whichVie
w=listView</xsl:variable>
> <xsl:variable name="urlPublishItem">mPublishItem?returnTo=<xsl:value-of
> select="$urlThisPage" /></xsl:variable>
> <xsl:variable name="urlImagePath">http://10.10.9.32/images</xsl:variable>
> <xsl:variable name="username">kevin</xsl:variable>
> <!-- /DTML Variables -->
>
> <xsl:template match="text()" />
>
> <xsl:template match="itemListInfo">
> <table width="100%" cellspacing="0" cellpadding="1" class="listTable">
> <tr><xsl:apply-templates select="headerInfo/headerList/header" /></tr>
> <xsl:apply-templates select="itemList/item" />
> </table>
> </xsl:template>
>
> <xsl:template match="header">
> <td class="listHeader">
> <xsl:if test="ancestor::headerInfo/sortBy = name">
> <xsl:choose>
> <xsl:when test="ancestor::headerInfo/sortOrder = 'ascending'">
> <img src="{$urlImagePath}/pointer_down.gif" />
> </xsl:when>
> <xsl:otherwise>
> <img src="{$urlImagePath}/pointer_up.gif" />
> </xsl:otherwise>
> </xsl:choose>
> </xsl:if>
> <xsl:choose>
> <xsl:when test="@sort = 'true'">
> <a href="javascript:void(0)"><xsl:value-of select="title" /></a>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="title" />
> </xsl:otherwise>
> </xsl:choose>
> </td>
> </xsl:template>
>
> <xsl:template match="item">
> <xsl:variable name="thisItem" select="." />
> <xsl:variable name="className">
> <xsl:choose>
> <xsl:when test="position() mod 2 = 0">
> myItems1
> </xsl:when>
> <xsl:otherwise>
> myItems2
> </xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> <tr class="{$className}">
> <xsl:for-each select="//itemListInfo/headerInfo/headerList/header">
> <xsl:if test="name = 'title'">
> <td align="left" class="{$className}">
> <xsl:apply-templates select="$thisItem/dc:title" />
> </td>
> </xsl:if>
> <xsl:if test="name = 'creator'">
> <td align="center" class="{$className}">
> <xsl:apply-templates select="$thisItem/dc:creator" />
> </td>
> </xsl:if>
> <xsl:if test="name = 'lastModified'">
> <td align="center" class="{$className}">
> <xsl:apply-templates select="$thisItem/dc:date" />
> </td>
> </xsl:if>
> <xsl:if test="name = 'rating'">
> <td align="center" class="{$className}">
> <xsl:apply-templates select="$thisItem/rating/ave" />
> </td>
> </xsl:if>
> <xsl:if test="name = 'numComments'">
> <td align="center" class="{$className}">
> <xsl:apply-templates select="$thisItem/comments/num" />
> </td>
> </xsl:if>
> <xsl:if test="name = 'status'">
> <td align="center" class="{$className}">
> <xsl:apply-templates select="$thisItem/status" />
> </td>
> </xsl:if>
> </xsl:for-each>
> </tr>
> </xsl:template>
>
> <xsl:template match="dc:title">
> <xsl:variable name="docID"><xsl:value-of
> select="ancestor::item/dc:identifier" /></xsl:variable>
> <xsl:if test="$bCheckboxes = 'true'">
> <input class="smallCheckbox" type="checkbox" name="ids:list"
> value="{$docID}" id="cb_{$docID}">
> <xsl:for-each select="//itemListInfo/checkInfo/idList/id">
> <xsl:if test="$docID = .">
> <xsl:attribute name="checked" />
> </xsl:if>
> </xsl:for-each>
> </input>
> </xsl:if>
> <span>
> <xsl:attribute name="title">
> <xsl:value-of select="ancestor::item/dc:coverage" />
> </xsl:attribute>
> <xsl:if test="$bLinks = 'true'">
> <xsl:choose>
> <xsl:when test="ancestor::item/dc:type = 'Personal HomePage'">
> <a href="{ancestor::item/uri}">
> <xsl:value-of select="." />
> </a>
> </xsl:when>
> <xsl:otherwise>
> <a href="{$urlThisPage}" onClick="setItemLayoverCookie('{$docID}')">
> <xsl:value-of select="." />
> </a>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:if>
> </span>
> </xsl:template>
>
> <xsl:template match="dc:creator">
> <xsl:variable name="docID"><xsl:value-of
> select="ancestor::item/dc:identifier" /></xsl:variable>
> <xsl:choose>
> <xsl:when test="$bLinks = 'true'">
> <a>
> <xsl:value-of select="." />
> </a>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="." />
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> <xsl:template match="status">
> <xsl:choose>
> <xsl:when test="($bUserIsManager = 'true') or (ancestor::item/creator =
> $username)">
> <a href="javascript:void(0)"
> onClick="pop2EditItems('{ancestor::item/uri}/{$urlPublishItem}'); return
> false;">
> <xsl:value-of select="." />
> </a>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="." />
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> <xsl:template match="dc:date">
> <span class="smallText"><i><xsl:value-of select="." /></i></span>
> </xsl:template>
>
> <xsl:template match="rating/ave">
> <xsl:value-of select="format-number(.,'0.0')" />
> </xsl:template>
>
> <xsl:template match="comments/num">
> <xsl:value-of select="." />
> </xsl:template>
>
> </xsl:stylesheet>
>



 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]