xsl-list
[Top] [All Lists]

RE: Selecting and printing certain nodes

2004-02-19 16:50:45
-----Original Message-----
From: Glenn MacGregor

<snip />
Although my input no longer looks like:


Hmm. I'll start by giving 'a' solution for the original layout, then see if
we can adapt it to use the adapted one

<xsl:stylesheet ...>
...
<xsl:template match="/">
  <xsl:apply-templates select="foreach/item" />
</xsl:template>

<xsl:template match="item">
  <xsl:apply-templates select="../do">
    <xsl:with-param name="pitem" select="." />
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="do">
  <xsl:param name="pitem" />
  <xsl:apply-templates>
    <xsl:with-param name="pitem" select="$pitem" />
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="node()">
  <xsl:param name="pitem" />
  <xsl:copy>
    <xsl:apply-templates>
      <xsl:with-param name="pitem" select="$pitem" />
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>

<xsl:template match="var">
  <xsl:param name="pitem" />
  <xsl:value-of select="$pitem" />
</xsl:template>
</xsl:stylesheet>

Actually, I think it would be even simpler to say:

<xsl:stylesheet ...>
...
<xsl:template match="/">
  <xsl:apply-templates select="foreach/do" />
</xsl:template>

<xsl:template match="do">
  <xsl:variable name="vdo" select="*"/>
  <xsl:for-each select="../item">
    <xsl:apply-templates select="$vdo">
      <xsl:with-param name="pitem" select="." />
    </xsl:apply-templates>
  </xsl:for-each>
</xsl:template>

<xsl:template match="node()">
  <xsl:param name="pitem" />
  <xsl:copy>
    <xsl:apply-templates>
      <xsl:with-param name="pitem" select="$pitem" />
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>

<xsl:template match="var">
  <xsl:param name="pitem" />
  <xsl:value-of select="$pitem" />
</xsl:template>

</xsl:stylesheet>


It looks like:

<foreach param="devices">
<tr><td><b>BOLDFACE</b> Some Text</td><td>Here</td></tr>
<tr><td> Test11</td><td>Test</td></tr>
</foreach>

Along with this fragment of XML I also have another XML file name
@param.xml
(devices.xml) which contains an XML list of all the devices I want to loop
through
<doc>
<item>dev1</item>
<item>dev2</item>
<item>dev3</item>
<item>dev4</item>
</doc>


So, change the template to something like:

<xsl:stylesheet ..>
..
<xsl:template match="/">
  <xsl:apply-templates select="foreach/do" />
</xsl:template>

<xsl:template match="do">
  <xsl:variable name="vdo" select="*" />
  <xsl:for-each select="document(
      concat($some_directory,.,'.xml')
         )//doc/item">
    <xsl:apply-templates select="$vdo">
      <xsl:with-param name="pitem" select="." />
    </xsl:apply-templates>
</xsl:template>

<!-- copy the node() and var templates from above -->

</xsl:stylesheet>


Hope this helps!

Cheers,

Andreas


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



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