|
Subject: Re: [xsl] How can I match some elements with cross-referencing? From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 16 Aug 2022 11:17:44 -0000 |
Am 16.08.2022 um 13:09 schrieb Richard Kerry richard.kerry@xxxxxxxx:
>
> I am putting together an XSL stylesheet to convert the format of some
> XML files [1].B I have a situation where I think I need some sort of
> cross-referencing within the file for setting the template matches,
> but I donbt know how I might achieve that.
>
> By that I mean that there are elements, lets call them type A, which
> use a regular expression in their match specs, and when found it is
> also necessary to find some related elements, type B, and rewrite them
> (or delete them).
>
> I would appreciate some advice on what sort of method to use for this.
>
> I think I can see three ways I might approach this.
>
> 1. On finding the type A element, its action includes finding the B
> element and rewriting it.B This ties all the processing to one
> template match.
> 2. Two separate templates.B One matches elements A and processes
> them.B The other matches elements of type B and includes some kind
> of look-up of any corresponding type A element.
> 3. Extra passes.B First pass to extract a list of names, and second
> pass to use that in the match spec, if possible.
>
> Ibm not sure whether the first of these is even possible.B It includes
> one template match of an element rewriting another element entirely.B
> Thatbs not XSLbs usual model and I donbt think it can be done, can
it?
>
> If the second option is the way to go, how should I go about defining
> the B element match to include the bcross referenceb, ie the search to
> establish whether there is a corresponding AB element?
>
> There is not a 1:1 correspondence between the two types.B Not all B
> elements have a corresponding A element.
>
> So, to make it more concrete, letbs say we have some A elements like
this:
>
> <A name=bn1.ub>Contents of A[n1]</A>
>
> <A name=bn2.ub>Contents of A[n2]</A>
>
> <A name=bn3.ub>Contents of A[n3]</A>
>
> And some B like this:
>
> <B reference=bn1.ub>Contents of B[n1]</B>
>
> <B reference=bn2.ub>Contents of B[n2]</B>
>
> <B reference=bn3.ub>Contents of B[n3]</B>
>
Use a key e.g.
B <xsl:key name="a" match="A[matches(@name, b(.+).ub)]" use="@name"/>
and then e.g.
B <xsl:template match="B[key('a', @reference)]"/>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] How can I match some elements, Richard Kerry richar | Thread | Re: [xsl] How can I match some elem, Richard Kerry richar |
| [xsl] How can I match some elements, Richard Kerry richar | Date | Re: [xsl] How can I match some elem, Richard Kerry richar |
| Month |