xsl-list
[Top] [All Lists]

[xsl] attribute value templates in elements fetched from a map?

2020-09-02 15:08:39
Hello all --

The prototype has a whole bunch of individual templates which are mostly
the same except in match expression and in one of the values created;
the XML structure is mostly identical.  Many other things about the
process are being driven out of a map already, and I find myself
wondering if there's a way to (in effect) have a dynamic call-template
instruction; I want to keep the context, and maybe evaluate some
attribute value templates in the xml nodes provided, but which exact
nodes (and which exact attribute value templates) vary.

So a list item might look up:

<style>
  <style-name value="List" />
  <paragraphNumber>
        <level depth="{@depth - 1}"/>
  </paragraphNumber>
</style>

While a paragraph looks up:

<style>
  <style-name value="Paragraph" />
</style>

The transform function is computationally expensive and I'd have to pass
in arbitrary context (for things like determining heading depth); that
doesn't seem appealing.  xsl:evaluate can evaluate the XPath in the
current context but then there's no obvious way to get that value into
the markup:

<xsl:map-entry key="'list'">
    <style>
      <style-name val="List" />
      <paragraphNumber>
            <level depth="{$calculated[1]}"/>
      </paragraphNumber>
    </style>
</xsl:map-entry>

returns an error because $calculated is undefined.  (The idea there being to
evaluate all the XPath into a sequence of zero or more results and
positionally reference the results as a means of keeping the evaluation
generic.)  Driving this from a map is attractive, but not if I'm doing
serialize-regexp-parse-xml-fragment to get values into it.

Is there a sensible way to do this?

Thanks!

-- 
Graydon Saunders  | graydonish(_at_)gmail(_dot_)com
Þæs oferéode, ðisses swá mæg.
-- Deor  ("That passed, so may this.")
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

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