Toon posts:

[XML + XSL] Meerdere XML's samenvoegen met een XSL

Pagina: 1
Acties:
  • 368 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben net begonnen met XML/XSL :+.

Is het mogelijk om 2 XML documenten tegenlijk te loaden in zo'n XSL engine, en dan beide documenten te gebruiken om wat output te genereren ?

Dus bijvoorbeeld dat je 1 XML document hebt met wat data erin, en dan nog eentje met wat andere zooi, en dan een XSL die van die 2 XML's wat moois maakt.

Of.. kan het niet anders dan dmv een scriptje wat de 2 XML's proces't en er een tijdelijke derde van maakt, en dat ik daar dan een XSL voor maak ?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
altijd goed om deze vragen 's nachts te stellen ;)

[edit]
Ik denk dat je met de document() functie wel wat kan bereiken, vb
code:
1
2
3
4
5
6
7
8
9
10
<xsl:variable name="FitnessCenter2" 
            select="document('file://localhost/xml-course/.../FitnessCenter2.xml')"/>
      <xsl:for-each select="$fitnessCenter2/FitnessCenter/Member">
        <TR>
            <TD><xsl:value-of select="Name"/></TD>
            <TD><xsl:value-of select="Phone[@type='home']"/></TD>
            <TD><xsl:value-of select="Phone[@type='work']"/></TD>
            <TD><xsl:value-of select="FavoriteColor"/></TD>
        </TR>
      </xsl:for-each>

(ook maar geript uit een course hoor :))

Maar dit is niet echt het domweg samenvoegen van 2 bestanden helaas.

Verwijderd

Topicstarter
Want ?

-- edit --

Beetje je posts gaan zitten editen als ik al gereplyed heb, smiecht >:)

Anyway, ziet er koel uit, ik ga er meteen mee experimenteren, dank.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op donderdag 20 december 2001 02:42 schreef Sneech het volgende:
Want ?
dan heeft mbravenboer goedkoper internet :P

Verwijderd

Topicstarter
Op donderdag 20 december 2001 02:45 schreef Orphix het volgende:
dan heeft mbravenboer goedkoper internet :P
Lol 8-)

Verwijderd

Topicstarter
Ik heb even verder zitten spelen met het laden van zo'n XML document in een variabele, en das eigenlijk een prima oplossing. Ik heb ff een XSL'tje in elkaar gedraait die nummers uit 1 XML inleest, en er nummers uit een andere XML bij optelt.

Hier is de eerste XML (docA.xml):
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>

<?xml-stylesheet type='text/xsl' href='plus.xsl'?>

<a>
    <number>6</number>
    <number>18</number>
</a>

, hier is de 2de (docB.xml):
code:
1
2
3
4
5
6
<?xml version='1.0'?>

<b>
    <number>5</number>
    <number>17</number>
</b>

, en hier is mn XSL'tje (plus.xsl):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version='1.0'?>

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:variable name="docB" select="document('file:c:\documents and settings\administrator\desktop\docB.xml')"/>

    <xsl:template match="/">
        <html>
            <pre>
                <xsl:for-each select="/a/number">
                    <xsl:variable name='t' select="position()"/>
                    <xsl:value-of select="."/> + <xsl:value-of select='$docB/b/number[$t]'/> = <xsl:value-of select='. + $docB/b/number[$t]'/><br/>
                </xsl:for-each>
            </pre>
        </html>
    </xsl:template>

</xsl:stylesheet>

Dit kan ongetwijfeld aan alle kanten beter (verbeteringen altijd welkom), maar ik vind het al fijntjes dat dit wat doet :).

Wat nu wel het geval is, is dat de XSL duidelijk door 1 van de 2 XML's wordt aangeroepen, dat zou ik toch graag anders zien. Maar ik geloof dat ik daarover hier al ergens een draadje had zien lopen, dus ik ga weer ff aan de slag *D.

Verwijderd

Topicstarter
Okee, nog ff zitten kloten, en dit is em geworden, de "Amazing Multi Addition Machine" >:)

Eerst wat schone XML data files, dus zonder XSL verwijzing erin:

zooitje_nummers.xml
code:
1
2
3
4
5
6
<?xml version='1.0'?>

<numbers>
    <number>6</number>
    <number>18</number>
</numbers>

meer_nummers.xml
code:
1
2
3
4
5
6
<?xml version='1.0'?>

<numbers>
    <number>5</number>
    <number>17</number>
</numbers>

Dan een launchertje dat de XSL laadt met de twee XML data files.

plus_launcher.xml
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>

<?xml-stylesheet type='text/xsl' href='plus.xsl'?>

<params
    file_a = 'c:\documents and settings\administrator\desktop\zooitje_nummers.xml'
    file_b = 'c:\documents and settings\administrator\desktop\meer_nummers.xml'
/>

En tot slot, het optel-XSL'tje dat zn data files uit de params haalt van de plus_launcher.

plus.xsl
code:
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
<?xml version='1.0'?>

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:template match="/params">

        <xsl:variable name="file_a" select="document(@file_a)"/>
        <xsl:variable name="file_b" select="document(@file_b)"/>

        <html>
            <pre>
                <xsl:for-each select="$file_a/numbers/number">
                
                    <xsl:variable name='pos' select="position()"/>
                    <xsl:variable name='num_b' select="$file_b/numbers/number[$pos]"/>
                    
                    <xsl:value-of select="."/> + <xsl:value-of select='$num_b'/> = <xsl:value-of select='. + $num_b'/><br/>

                </xsl:for-each>
            </pre>
        </html>

    </xsl:template>

</xsl:stylesheet>

Zow, is da mooi of niet ? 8-) Is het al een mbravenboer XML/XSL award waard ? :9

(Hehe just kidding, ben pas een paar uur met XML/XSL bezig :+.)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Leuk gedaan, maar ik heb nog een nieuwe uitdaging voor je >:)
Probeer eens dit stukje
code:
1
2
<xsl:variable name="file_a" select="document(@file_a)"/>
<xsl:variable name="file_b" select="document(@file_b)"/>

flexibeler te maken, oftewel dat je alleen bestanden hoeft in te geven in plus_launcher.xml en dat ze automatisch mee worden genomen (8> :)
hehe bezigheids therapie dit, jammer dat ik er geen geld voor krijgt :'( :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Orphix: dan heeft mbravenboer goedkoper internet :P
Hehe ;) . Gratis zelfs :+ . Helaas sliep ik vannacht een keer 8-) . Ik zie dat het al opgelost is, dus dat kan ik vaker doen ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1