DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  SharePoint konferenz vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
Autor:Andreas Rauch

Aus 2 mach 1 oder wie kombiniere ich 2 XML Dateien

Es kommt oft vor, daß Daten auf verschieden XML Dateien verstreut sind. Bestullungen hier, Kundedaten da. Desöfteren höre ich dann die Frage, wie man in einer XSL mit zwei XML Dateien arbeiten kann. Denken wir daran, daß beispw. die XSL Datei aus einer XML Datei aufgerufen wird.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="bestell.xsl"?>

Dann ist es gut zu wissen, daß eine einfache Methode gibt, um 2 XML Daten für eine Abfrage zu kombinieren.

Es geht einfacher als Sie glauben. Das Stichwort heißt hier <xsl:variable>.  Wir weisen zu Beginn des XSL FIles ein anderes XML File als Varable hinzu.

Fertig? Variablen? Eigentlich schon...


Bereits in einem früheren Artikel http://www.developer-training.de/news.asp?artnr=461 habe ich auf die Möglichkeiten mit Variablen beschrieben. Neu ist heute, daß sie einer Variablen um ein weiteres XML Dokument zuweisen.

Unser Beispiel soll folgendes machen. Wir habe eine Bestelliste im XML Format mit Kunden IDs und eine XML Datei mit Kundendaten.

Kunden mit XSL-Verweis

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="members.xsl"?>
<root>
 <members>
  <name kdid="1">Tobi Terror</name> 
 </members>
 <members> 
  <name kdid="3">Berny Sesam</name>
 </members>
 <members> 
  <name kdid="2">Wolle Knolle</name> 
 </members>
</root>

Die Bestellungen dazu:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <order kdid="1">
  <art>70</art>
  <art>44</art>
  <art>234</art>
 </order>
 <order kdid="2">
  <art>73</art>
  <art>45</art>
  <art>2323</art>
 </order>
 <order kdid="3">
  <art>72</art>
  <art>46</art>
  <art>2323</art>
 </order>
</root>

Nun passen wir unsere XSL Datei an, um mit beiden XML Dateien arbeiten zu können. Durch den

<xsl:variable name="Texts" select="document('mitglieder.xml')"/>

Tag belegen wir die Varable mit unserem 2-ten XML Dokument- unseren Kundendaten.

Nun wollen wir beispielsweise alle Namen von Kundenhaben, die auch in einer Bestelliste vorkommen. Mit Hilfe einer for each Anweisung und einem geeigneten pattern finden wir alle übereinstimmenden Namen.

< TD> <xsl:for-eachselect="(//members[name/@id=$Texts//Bestellung/@id])">

Unsere gesamte XSL Datei:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:variable name="Texts" select="document('mitglieder.xml')"/> 
   <xsl:template match="/">
    <html><body>< BR>    <table><BR>        <xsl:for-eachselect="(//members[name/@kdid=$Texts//order/@kdid])">
            <tr>
               <td bgcolor="red"><xsl:value-of select="name"/></td>    
            </tr>
         </xsl:for-each>  
    </table>   
    </body></html>
</xsl:template> 
</xsl:stylesheet>

Ergebnis:

Tobi Terror
Berny Sesam
Wolle Knolle

Viel Spaß damit!


Diskutieren Sie in den Foren

ppedv AG - 5 Sterne Trainings