On Mon, 8 Dec 2003, David Carlisle wrote:
> <xsl:template match="$stage">
> Your stage variable contains a result tree fragment (or in xslt2 a node set
> consisting of a single document node which has a text node child with
> value "stagedir") neither of these is an Xpath pattern, so neither can be
> used in a match attribute.
Yup, that is what I thought (well, that it wouldn't/shouldn't work) so why
I asked. ;-) But always good to know why it doesn't work. Thanks.
>
> In XSLT 2 however you could do
> <xsl:template match="*[name()=$stage]"
> as the annoying restriction of not allowing variables in match patterns
> is planned to be dropped.
Yup, This has been suggested, and sounds good, unless I'm assuming
I have two elements with different names that I want to normalize to
a single one. (or does <xsl:variable
name="stage">sd|stageDir</xsl:variable> work? )
> An alternative approach of course, is rather than try to paramaterise
> your tempates so they work for all inputs, do a two pass system that
> normalises the input.
Well this is sort of what I'm doing. The original files aren't
xml but cocoa. A perl regular expression changes the cocoa to
an (often) well-formed document of empty elements. so:
<Q Someone> This is a speech
becomes
<Q value="Someone" /> This is a speech
This is then changed to a TEI'ish name form of:
<sp speaker="Someone"/> This is a speech
It is at this stage that I want to normalize everything to the
same names. Because the next stylesheet fills out the xml
(based on suggestions here) and since that is the more
complicated one I want to change it less. This leaves:
<sp><speaker>Someone</speaker>
<l>This is a speech</l>
...
</sp>
> ie have a main stylesheet that does
>
> <xsl:template match="title">....
>
> then to customise for your second form, in stead of doing this:
> <xsl:variable name="stage">stagedir</xsl:variable>
>
> do this
>
> <xsl:template mode="normalise" match="t">
> <title>
> <xsl:apply-templates mode="normalise"/>
> </title>
> </xsl:template>
I'm not sure I understand this. So make a short stylesheet
which moves things like <Q /> to be <sp /> (in example above)
but don't I need to change that each time?
> This is more flexible as it can cope with differences in structure that
> are slightly greater than just element renaming.
>
> If on the other hand the structures are really identical you might not
> need names at all eg your two examples could be handles using patterns
> of
>
> match="body/*[1]" (t or title)
> match="body/*[position() > 1]" (A or Act)
> match="body/*/*" (scn or scene)
They aren't reliably that identical. (I wish!)
-James
---
Dr James Cummings, Oxford Text Archive, James.Cummings@xxxxxxxxxxxxxx
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|