Altova StyleVision 2025 Basic Edition

Zusammenführen von XML-Daten aus mehreren Quellen

Zur Startseite Zurück Nach oben Weiter

Wenn als XSLT-Version des SPS die Version XSLT 2.0 oder XSLT 3.0 verwendet wird, so können XML-Daten aus mehreren XML-Quelldateien in einem Ausgabedokument zusammengeführt werden.

 

Normalerweise wird der Zusammenführung von Daten ein gemeinsamer Nenner in den Daten wie z.B. eine ID zugrunde gelegt. So kann die Personalabteilung z.B. die Personendaten eines Mitarbeiters in einem Unternehmen, der durch eine persönliche ID identifiziert wird, in mehreren XML-Dateien speichern: (i) Stammdaten, (ii) Lohnzettel, (iii) Arbeitszeiten und Urlaub, (iv) besuchte Schulungen usw. Die Daten aus diesen verschiedenen Dateien können unter Verwendung der persönlichen ID als Schlüssel in einem einzigen Ausgabedokument zusammengeführt werden.

 

Anmerkung:In der Enterprise Edition können Sie mehrere Quellschemas inkludieren, sodass XML-Nodes aus anderen Schemas über den Parameternamen für das entsprechende Schema ausgewählt werden können (wie dies im Beispiel unten der Fall ist). In der Professional und der Basic Edition können Sie die gewünschte XML-Datei und den XML-Node in dieser Datei mit Hilfe der Funktion doc() abrufen. Die doc() Funktion von XPath 2.0 ermöglicht den Zugriff auf die Dokument-Root von externen XML-Dokumenten, wodurch Node-Inhalt aus externen XML-Dokumenten in die Ausgabe eingefügt werden kann. Sie können die XML-Daten daher mit Hilfe einer automatischen Berechnung unter Verwendung der doc() Funktion in der Ausgabe zusammenführen (siehe Beispiel unten).

 

Beispiel

Der Ordner "Eigene Dateien", C:\Documents and Settings\<username>\My Documents\Altova\StyleVision2025\StyleVisionExamples, enthält eine Beispiel-SPS-Datei (MergeData_2_Files.sps), in der gezeigt wird, wie  Daten aus verschiedenen XML-Quelldateien zusammengeführt werden können. Das SPS wählt Daten aus einer Bestellung (MergeOrder.xml, siehe unten) aus, die ein fiktiver Kunde abgegeben hat.

 

<?xml version="1.0" encoding="UTF-8"?>

<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MergeOrder.xsd">

   <Item partNum="238-KK" quantity="3" shipDate="2000-01-07" comment="With no inclusions, please."/>

   <Item partNum="748-OT" quantity="1" shipDate="2000-02-14" comment="Valentine's day packaging."/>

   <Item partNum="229-OB" quantity="1" shipDate="1999-12-05"/>

   <Item partNum="833-AA" quantity="2" shipDate="1999-12-05" comment="Need this for the holidays!"/>

</Order>

 

Anhand des Werts des Attributs /Order/Item/@partNum in dieser Datei (siehe oben) werden die bestellten Produkte aus dem in einer anderen Datei gespeicherten Artikelkatalog MergeArticles.xml (siehe unten) ausgewählt.

 

<?xml version="1.0" encoding="UTF-8"?>

<Articles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MergeArticles.xsd">

   <Article PartNum="833-AA">

      <ProductName>Lapis necklace</ProductName>

      <Price>99.95</Price>

   </Article>

   <Article PartNum="748-OT">

      <ProductName>Diamond heart</ProductName>

      <Price>248.90</Price>

   </Article>

   <Article PartNum="783-KL">

      <ProductName>Uncut diamond</ProductName>

      <Price>79.90</Price>

   </Article>

   <Article PartNum="238-KK">

      <ProductName>Amber ring</ProductName>

      <Price>89.90</Price>

   </Article>

   <Article PartNum="229-OB">

      <ProductName>Pearl necklace</ProductName>

      <Price>4879.00</Price>

   </Article>

   <Article PartNum="128-UL">

      <ProductName>Jade earring</ProductName>

      <Price>179.90</Price>

</Article>

 ...

</Articles>

 

Um die Daten zusammenzuführen, wird innerhalb der Vorlage /Order/Item (siehe Abbildung unten) eine benutzerdefinierte Vorlage angelegt, die das entsprechende Article-Element in der Datei MergeArticles.xml anhand der Artikelnummer des bestellten Artikels auswählt. Der XPath-Ausdruck (der sich im /Order/Item Kontext befindet ) lautet: $Articles//Article[@PartNum=current()/@partNum]

 

MergeXMLData

 

Mit dieser Vorlage wird ein Ausgabedokument erzeugt, das in etwa wie in der Abbildung unten aussieht.

 

MergeXMLDataOutput

 

Beachten Sie Folgendes: Während die Anzahl der einzelnen bestellten Artikel aus der Datei MergeOrder.xml stammt, wird der Name des bestellten Artikels aus der Datei MergeArticles.xml abgerufen. Bitte beachten Sie außerdem, wie der Node ProductName innerhalb des Kontexts der Vorlage /Articles/Article ausgewählt wird.

 

Dasselbe Ergebnis wie oben könnte auch mit Hilfe einer automatischen Berechnung erzielt werden (siehe Abbildung unten).  Ziehen Sie das quantity Attribut aus dem Fenster "Schema-Struktur" und erstellen Sie es als "Inhalt". Fügen Sie anschließend wie in der Abbildung gezeigt, eine automatische Berechnung hinzu und weisen Sie der automatischen Berechnung wie oben beschrieben einen XPath-Ausdruck zu.

 

MergeXMLDataAutoCalc

 

Der XPath-Ausdruck der automatischen Berechnung könnte den benötigten Node entweder über den Parameter einer anderen Schemaquelle oder die doc() Funktion abrufen:

 

 $Articles//Article[@PartNum=current()/@partNum]/ProductName

 

oder

 

 doc('MergeArticles.xml')//Article[@PartNum=current()/@partNum]/ProductName

 

Beachten Sie Folgendes: Während der erste XPath-Ausdruck oben einen Parameter verwendet, um ein anderes XML-Schema zu referenzieren (eine Funktion, die nur in der Enterprise Edition zur Verfügung steht), verwendet der zweite Ausdruck die doc() Funktion von XPath 2.0 (eine Funktion, die auch in der Professional und der Basic Edition zur Verfügung steht).

 

© 2018-2024 Altova GmbH