xsl-list
[Top] [All Lists]

Re: [xsl] Identifying unique attribute values in nested sibling elements

2011-09-29 15:49:38
Ken,
I still have not correctly said what I need:

(1) Please think of the <Value> attributes as though 'kc-value' were equivalent to 'dollars' and 'h-value' to 'cents' (the l-value mentioned earlier is like those US stamps issued just before a rate change that are expressed as a letter value). <Value> attributes can only appear [ignoring the specific instance values given here] in the following combination:

<Value kc-value="1"> think of this as $1.
<Value kc-value="1" h-value="50"> Think of this as $1.50
<Value kc-value="0" h-value="50"> Think of this as $0.50
<Value kc-value="0" l-value="A" Think of this as one of those strange rate-change postage stamps that have a letter value of 'A'.

Note that kc-value is required, the other two, h-value and l-value, are both optional and are mutually exclusive. When l-value is present, kc-value must be set to the value '0'.

(2) These <Value> elements would produce this XHTML for the particular target XHTML page:

<a href="../aval/1.htm">1kc</a>
<a href="../aval/1-50.htm">1.50kc</a>
<a href="../aval/0-50.htm">40h</a> <!-- think of 40cents -->
<a href="../aval/a.htm">A</a>

I have two functions that can transform these attributes into their final text formats for the 'href' part of the output:

xsl:function name="cps:letter-file-name" as="xs:string">
   <xsl:param name="l" as="xs:string"/>
   <xsl:value-of select="concat(lower-case($l), '.htm')"/>
 </xsl:function>

 <xsl:function name="cps:value-file-name" as="xs:string">
   <xsl:param name="kc" as="xs:string"/>
   <xsl:param name="h" as="xs:string"/>
   <xsl:choose>
     <xsl:when test="$h">
       <xsl:value-of select="concat($kc, '-', $h, '.htm')"/>
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="concat($kc, '.htm')"/>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:function>

And another that creates the <a></a> text:

<xsl:function name="cps:display-denomination" as="xs:string">
  <xsl:param name="kc" as="xs:string"/>
  <xsl:param name="h" as="xs:string"/>
  <xsl:choose>
    <xsl:when test="$kc eq '0'">
      <xsl:value-of select="concat($h,'h')"/>
    </xsl:when>
    <xsl:when test="not($h eq '0')">
      <xsl:value-of select="concat($kc, '.', $h, 'Kč')"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="concat($kc, 'Kč')"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:function>

This is why I was ineptly trying to change my strings back into nodes.

(3) I need to modify your 'reports' function to accommodate all four possibilities, but do not know enough about XPath to do it. May I bother you one more time to show me how?

As an aside, the stylesheet transforms the XML into an XHTML page for every <Stamp> element, and to an additional page for each of the different <Formats> elements (there are five optional possibilities). It is *extremely* easy for me to identify which pages to generate when I am in the context of a <Stamp> element that has certain characteristics (and these characteristics change). I suspect that someone with your sophistication could do it from the context of the <Set> element, but it escapes me how to do it that way. This is why I keep rewriting the suggestions I have received to operate from within the context of a <Stamp> element rather than from within the context of the enclosing <Set> element. Dumb, I know, but I already know how to do it.

Thanks again,
Mark



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