[XSLT] Nodes benaderen uit meerdere XML bestanden

Pagina: 1
Acties:

  • Isengrim
  • Registratie: Februari 2004
  • Laatst online: 17:19
Hallo

Ik zit nou al een tijdje met een probleem te worstelen waar ik maar niet uit kom

Ik heb 3 XML bestanden, die allemaal anders opgebouwd zijn.
Nou probeer ik die met een XSLT bestand te mergen tot 1

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" media-type="text/xml"  version="1.0" encoding="UTF-8" />
  <xsl:variable name="orderinfo" select="document('test2.xml')"></xsl:variable>
  <xsl:variable name="klantinfo" select="document('test.xml')" />
  <xsl:variable name="orderregelinfo" select="document('test3.xml')" />
  
  
    <xsl:template match="/">
    
        <xsl:element name ="orderbevestiging">
        <xsl:element name="uworder">
      
            <xsl:apply-templates />
        </xsl:element>
        </xsl:element>
    <xsl:apply-templates select="$klantinfo/Ordernummer"></xsl:apply-templates>
    </xsl:template>
        
    <xsl:template match="Ordernummer">
        <xsl:element name="uwordernummer">
        <xsl:value-of select="$klantinfo//Ordernummer" />
        <xsl:apply-templates />
        </xsl:element>
    
    </xsl:template>
  <xsl:template match="Factuurnummer">
    <xsl:element name ="onsordernummer">
    <xsl:value-of select="$klantinfo//Factuurnummer"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="orderinfo/Leverdatum">
    <xsl:element name="verwachteleverdatum">
      <xsl:value-of select="$orderinfo//Leverdatum"/>
    </xsl:element>    
  </xsl:template>
  
  <xsl:template match="">
    <xsl:value-of select="$orderregelinfo//artikelnummer"/>
  </xsl:template>
  
    
    
        
</xsl:stylesheet>


De eerste 2 templates werken goed, deze nodes die ik benader staan in test.xml
Maar hoe kan nu Leverdatum in test2.xml benaderen?

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Klopt je match wel? Hoe zien die bestanden er uit?

Werkt het wel als je aan je eerste template dit toevoegt:
XSLT:
1
<xsl:apply-templates select="$orderinfo/Leverdatum"></xsl:apply-templates>

Dat zorgt er namelijk volgens mij voor dat ie op die nodes template(s) gaat toepassen.

[ Voor 71% gewijzigd door Michali op 15-11-2006 08:37 ]

Noushka's Magnificent Dream | Unity


  • Isengrim
  • Registratie: Februari 2004
  • Laatst online: 17:19
Ik heb het al werkend, volgens mij was ik veel te moeilijk aan het denken

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
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" media-type="text/xml"  version="1.0" encoding="UTF-8" indent="yes" />
  
  <!--Declareren van de variabelen en bestanden die nodig zijn voor deze transformatie-->
  <xsl:variable name="orderinfo" select="document('XML_orderinfo.xml')" />
  <xsl:variable name="orderregelinfo" select="document('XML_orderregel.xml')" />
 

  <!--De voorwaarden-->
  <xsl:template match="/">
    <xsl:element name ="orderbevestiging">
      <xsl:element name="uworder">
        <xsl:element name="uwordernummer">
          <xsl:value-of select="$orderinfo//ordernummer"/>
        </xsl:element>
        <xsl:element name ="onsordernummer">
          <xsl:value-of select="$orderinfo//ordernummer" />
        </xsl:element>
        <xsl:element name ="verwachteleverdatum">
          <xsl:value-of select="$orderinfo//leverdatum" />
        </xsl:element>
        <xsl:element name ="besteldartikel">
          <!--Alle artikelnummer en bestelde aantallen ophalen en laten zien-->
          <xsl:for-each select="$orderregelinfo/dataroot/XML_orderregel">
            <xsl:element name="artikelnummer">
              <xsl:value-of select="artikelnummer"/>
            </xsl:element>
            <xsl:element name="aantal">
              <xsl:value-of select="aantalbesteld"/>
            </xsl:element>
          </xsl:for-each>
        </xsl:element>
      </xsl:element>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>


Doet precies wat ik wil