xsl-list
[Top] [All Lists]

[xsl] Muenchian grouping with either attribute

2006-09-14 06:59:24
My apologies in advance. I'm sure this is a FAQ, but I'm having a hard time 
piecing the answer together.

The input is like this:

<root>
 <item>
  <property attr1="foo" attr2="bar" />
  <property attr1="bar" attr2="foo" />
  <property attr1="bar" attr2="baz" />
 </item>
</root>

The property elements are not guaranteed to all have attr1 and attr2; some 
might have attr3, some might be missing attr1, etc.

The ultimate goal is an output tally like this:

<properties>
  <property name="foo" freq_attr1="1" freq_attr2="1" />
  <property name="bar" freq_attr1="2" freq_attr2="1" /> 
  <property name="baz" freq_attr1="0" freq_attr2="1" />
</properties>

That is, if property(_at_)attr1="bar" twice in the input, that is reflected 
accordingly.

I'm close; I can do the following.

<xsl:template match="property">
  <xsl:variable name="name">
    <xsl:value-of select="@attr1|@attr2" />
  </xsl:variable>
  <property>
    <xsl:attribute name="name">
      <xsl:value-of select="$name" />
    </xsl:attribute>
    <xsl:attribute name="freq_attr1">
      <xsl:value-of select="count(/item/property[(_at_)attr1 = $name])" />
    </xsl:attribute>
    <xsl:attribute name="freq_attr2">
      <xsl:value-of select="count(/item/property[(_at_)attr2 = $name])" />
    </xsl:attribute>
  </property>
</xsl:template>

The tallies in the output are correct, but because the variable "name" is not 
restricted to unique values, I get multiple occurrences of each property.

I know that the standard answer in cases like this is "do the Muenchian". But 
all the examples I've found deal with the Muenchian over elements, whereas 
here, I need a Muenchian on the combination of attr1 and attr2. How do I do 
that?

Thanks in advance. For what it's worth, I'm using libxslt2, and I need to stick 
to XSLT 1.0.

_________________________________________________________________
Search from any Web page with powerful protection. Get the FREE Windows Live 
Toolbar Today!
http://get.live.com/toolbar/overview
--~------------------------------------------------------------------
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>