Toon posts:

[XML + XSL] 2 xsl sheets overschrijven elkaar

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een applicatie waarbij php een formulier genereerd in XML, deze moet natuurlijk als HTML uitgepoept worden dus daar gebruik ik dan XSL voor.

Ik heb een volgende XML structuur:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{...}
<form:formelement />
<forme:formelement type="rptcontainer" xslid="CustomerAgreementCollection" >
    
    <rpt:repeaterroot>
        <rpta:repeaterattributes>
        </rpta:repeaterattributes>      
        <rpta:repeateritems>
        </rpta:repeateritems>
    </rpt:repeaterroot>
    
</forme:formelement>
<form:formelement />
{...}
<form:formelement />        
<forme:formelement type="rptcontainer" xslid="CustomerPacketCollection" >
    
    <rpt:repeaterroot>
        <rpta:repeaterattributes>
        </rpta:repeaterattributes>      
        <rpta:repeateritems>
        </rpta:repeateritems>
    </rpt:repeaterroot>
    
</forme:formelement>
<form:formelement />
{...}


Nou wil ik via 2 XSL includes beide elementen omzetten naar HTML. Omdat de XML nodes identiek zijn, zijn de 2 verschillende XSL bestanden ook gebasseerd op dezelfde structuur, namelijk:

BESTAND 1
code:
1
2
3
4
5
6
7
8
9
10
<xsl:template match="/rpt:repeaterroot" >
    <xsl:apply-templates />
</xsl:template>
        
<xsl:template match="rpta:repeaterattributes" >
</xsl:template>
        
<xsl:template match="rpta:repeateritems" >
    *** AGREEMENT HTML ***
</xsl:template>


BESTAND 2

code:
1
2
3
4
5
6
7
8
9
10
<xsl:template match="/rpt:repeaterroot" >
    <xsl:apply-templates />
</xsl:template>
        
<xsl:template match="rpta:repeaterattributes" >
</xsl:template>
        
<xsl:template match="rpta:repeateritems" >
    *** PACKET HTML ***
</xsl:template>


Hoe kan ik er nu voor zorgen dat de beide XLS sheets op de juiste XML nodes
worden toegepast? Het unieke van de de repeaterroots is in principe het attribute
xslid van de parent... Maar die kan ik in het ge-include bestand niet bereiken via:
code:
1
../@xslid


Ik ga nu pitten en kijken of ik nog een opleving krijg om dit op te lossen maar kom er nu niet meer
uit dus hulp is welkom!

Verwijderd

Topicstarter
Nou toen probeerde ik er weer met een frisse blik aan te beginnen, maar ook met een parameter lukt het niet...

  • apa
  • Registratie: April 2001
  • Laatst online: 04-10 10:11

apa

Run Forest, ruuuuuuuuuunnnnn!!

De hoofd-template van je XSL's ziet er als volgt uit:
code:
1
<xsl:template match="/rpt:repeaterroot" >

Merk op dat je de "match" start met een slash ("/") wat betekent dat die template enkel van toepassing is op root-elementen.

Heb je het volgende geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
<xsl:template match="rpt:repeaterroot[../@xslid='CustomerAgreementCollection']" >
    <xsl:apply-templates mode="CustomerAgreementCollection" />
</xsl:template>
        
<xsl:template match="rpta:repeaterattributes" mode="CustomerAgreementCollection" >
</xsl:template>
        
<xsl:template match="rpta:repeateritems" mode="CustomerAgreementCollection" >
    *** AGREEMENT HTML ***
</xsl:template>

Dit is een voorbeeld voor BESTAND1, maar voor BESTAND2 zijn de wijzigingen analoog.

PC: R5-2600X | X370-Pro | 2x8GB | 960Pro 512GB | WD 4TB | GTX 660 | Eizo CX240 | Steinberg UR22MkII | JBL LSR305