xsl-list
[Top] [All Lists]

Re: [xsl] What is the equivalent for-each of <xsl:copy-of select="$elements"/>

2010-05-16 11:07:41
Thanks Mukul,

This worked for me.
<xsl:apply-templates select="$tableAsXML" mode="x" />

 <xsl:template match="*" mode="x">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates mode="x"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="text()" mode="x">
    <xsl:call-template name="normalizeEntityForHTML">
      <xsl:with-param name="arg" select="."/>
    </xsl:call-template>
  </xsl:template>

And Martin your right it was outputting content just not with the
correct html table hierarchy like so.

<table id="mh43527">  </table>
               <tr id="mh43529">     </tr>
               <td id="mh43531">&nbsp;</td>
               <td id="mh43533">&nbsp;</td>
               <td id="mh43535">&nbsp;</td>

I made a mistake of looking at the view source from firefox. Firefox
was modifying the poor input such that the elements in the table were
not present in the source.

Regards
Alex



On Sun, May 16, 2010 at 3:41 PM, Mukul Gandhi 
<gandhi(_dot_)mukul(_at_)gmail(_dot_)com> wrote:
I guess, you could accomplish this with a special 'mode' defined for
templates. Perhaps something like below:

<xsl:apply-templates select="$tableAsXML" mode="x" />

<xsl:template match="*" mode="x">
   <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates mode="x" />
 </xsl:copy>
</xsl:template>

<xsl:template match="text()" mode="x">
   <!-- do something -->
</xsl:template>

On Sun, May 16, 2010 at 8:19 PM, Alex Muir 
<alex(_dot_)g(_dot_)muir(_at_)gmail(_dot_)com> wrote:
 Hi,

Given a function that returns html elements stored within the
tableAsXML variable

    <xsl:variable name="tableAsXML" as="element()*">
        <xsl:copy-of select="d:htmlparse($arg)"/>
      </xsl:variable>

I can output the elements within an html document like so correctly

        <xsl:copy-of select="$tableAsXML"/>

However I want to copy all the elements and apply a template to the text().

The output I get for the following for-each loop is only the text and
no html elements and I'm struggling to figure out why.

     <xsl:for-each select="$tableAsXML//*">
          <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:call-template name="normalizeEntityForHTML">
              <xsl:with-param name="arg" select="text()[1]"/>
            </xsl:call-template>
          </xsl:copy>
      </xsl:for-each>

What do I need to do differently to copy the elements within
$tableAsXML and apply a template to each element text node?

Thanks

--
Alex

An informal recording with one mic under a tree leads to some pretty
sweet acoustic sounds.
https://sites.google.com/site/greigconteh/albums/diabarte-and-sons



--
Regards,
Mukul Gandhi

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





-- 
Alex

An informal recording with one mic under a tree leads to some pretty
sweet acoustic sounds.
https://sites.google.com/site/greigconteh/albums/diabarte-and-sons

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