Ähnliche Fragen wurden gestellt, und ich habe sie gelesen und versucht, dies herauszufinden mit Tutorials und was nicht, aber nicht in der Lage. Ich bin mir sicher, dass es darum geht, den richtigen XPath zu schreiben, aber ich kann es nicht herausfinden. Ich versuche, eine Liste von Dateien (im Grunde alles in einem Ordner) zu nehmen und sie in ein anderes Schema-Format zu kombinieren. Der Trick besteht darin, dass ein Teil der Informationen aus den einzelnen Dateien als Nachschlagetabelle in der resultierenden XML-Datei verwendet werden muss. Meine Lösung muss rein XSLT1.0 sein. Es geht wahrscheinlich ohne zu sagen, dass alles unter fiktiv ... außer vielleicht die Struktur der „manifestiert“ xml-Datei, die wie folgt aussieht:Zusammenführen von Daten aus mehreren XML-Dateien ohne Duplikate mit XSLT
<files>
<file>request1.xml</xml>
<file>request2.xml</xml>
<file>request3.xml</xml>
<files>
Request1.xml Datei wie folgt aussehen könnte:
<?xml version="1.0" encoding="UTF-8"?>
<ProductList xmlns:pl="http://products.produsor.com/pml" xmlns:pi="http://standards.product.produsor.com/pml" createDateTime="2014-05-06T18:13:51.0Z" version="5.0">
<pl:Request requestId="ADF87A9DF7" quantity="1">
<pl:SystemIdentifier name="GUID">38DDF5C1-A049-44DB-9EEA-3F5CB831228D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:Product>
<pl:Names>
<pi.ProductNameLongDescription>Classic Design Round Dinning Table</pi.ProductNameLongDescription>
<pi.ProductNameShort>Dinning Table</pi.ProductNameShort>
</pl:Names>
<pl:Description>
<pi.ProductLongDescription>This is a really awesome table.</pi.ProductLongDescription>
<pi.ProductShortDescription>It's made of wood</pi.ProductShortDescription>
</pl:Description>
<pl:Category>
<pl:Name>Table</pl:Name>
<pl:Description>This category is for tables</pl:Description>
<pl:Priority>1</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Dinning Furniture</pl:Name>
<pl:Description>This category is for Dinning Furniture</pl:Description>
<pl:Priority>2</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Wood Furniture</pl:Name>
<pl:Description>This category is for Wood Furniture</pl:Description>
<pl:Priority>3</pl:Priority>
</pl:Category>
</pl:Product>
</pl:Request>
<pl:Request requestId="DA7FDAFDA9" quanitity="1">
<pl:SystemIdentifier name="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483269</pl:SystemIdentifier>
<pl:Product>
<pl:Names>
<pi.ProductNameLongDescription>Classic Design Round Coffee Table</pi.ProductNameLongDescription>
<pi.ProductNameShort>Coffee Table</pi.ProductNameShort>
</pl:Names>
<pl:Description>
<pi.ProductLongDescription>This is a really awesome table.</pi.ProductLongDescription>
<pi.ProductShortDescription>It is made of wood</pi.ProductShortDescription>
</pl:Description>
<pl:Category>
<pl:Name>Table</pl:Name>
<pl:Description>This category is for tables</pl:Description>
<pl:Priority>1</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Living Room Furniture</pl:Name>
<pl:Description>This category is for Dinning Furniture</pl:Description>
<pl:Priority>4</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Wood Furniture</pl:Name>
<pl:Description>This category is for Wood Furniture</pl:Description>
<pl:Priority>3</pl:Priority>
</pl:Category>
</pl:Product>
</pl:Request>
</ProductList>
Und Request2.xml würde wie folgt sein:
<?xml version="1.0" encoding="UTF-8"?>
<ProductList xmlns:pl="http://products.produsor.com/pml" xmlns:pi="http://standards.product.produsor.com/pml" createDateTime="2014-05-06T18:13:51.0Z" version="5.0">
<pl:Request requestId="DFADF08D0A" quantity="10">
<pl:SystemIdentifier name="GUID">38DDF5C1-A049-44DB-9EEA-3F5CB831228D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:Product>
<pl:Names>
<pi.ProductNameLongDescription>Classic Design Round Dinning Table</pi.ProductNameLongDescription>
<pi.ProductNameShort>Dinning Table</pi.ProductNameShort>
</pl:Names>
<pl:Description>
<pi.ProductLongDescription>This is a really awesome table.</pi.ProductLongDescription>
<pi.ProductShortDescription>It's made of wood</pi.ProductShortDescription>
</pl:Description>
<pl:Category>
<pl:Name>Table</pl:Name>
<pl:Description>This category is for tables</pl:Description>
<pl:Priority>1</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Dinning Furniture</pl:Name>
<pl:Description>This category is for Dinning Furniture</pl:Description>
<pl:Priority>2</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Wood Furniture</pl:Name>
<pl:Description>This category is for Wood Furniture</pl:Description>
<pl:Priority>3</pl:Priority>
</pl:Category>
</pl:Product>
</pl:Request>
<pl:Request requestId="RER7689EQ9" quanitity="10">
<pl:SystemIdentifier name="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483269</pl:SystemIdentifier>
<pl:Product>
<pl:Names>
<pi.ProductNameLongDescription>Classic Design Round Coffee Table</pi.ProductNameLongDescription>
<pi.ProductNameShort>Coffee Table</pi.ProductNameShort>
</pl:Names>
<pl:Description>
<pi.ProductLongDescription>This is a really awesome table.</pi.ProductLongDescription>
<pi.ProductShortDescription>It is made of wood</pi.ProductShortDescription>
</pl:Description>
<pl:Category>
<pl:Name>Table</pl:Name>
<pl:Description>This category is for tables</pl:Description>
<pl:Priority>1</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Living Room Furniture</pl:Name>
<pl:Description>This category is for Dinning Furniture</pl:Description>
<pl:Priority>4</pl:Priority>
</pl:Category>
<pl:Category>
<pl:Name>Wood Furniture</pl:Name>
<pl:Description>This category is for Wood Furniture</pl:Description>
<pl:Priority>3</pl:Priority>
</pl:Category>
</pl:Product>
</pl:Request>
</ProductList>
Und was ich will, ist folgende:
<ProductList xmlns:pl="http://products.produsor.com/pml">
<pl:Submission>
<!--********* This is the problem area *************-->
<pl:Descriptions>
<pl:Description id="1">This is a really awesome table.</pl:Description>
</pl:Descriptions>
<pl:Categories>
<pl:Category id="1">Table</pl:Category>
<pl:Category id="2">Dinning Furniture</pl:Category>
<pl:Category id="3">Living Room Furniture</pl:Category>
<pl:Category id="4">Wood Furniture</pl:Category>
</pl:Categories>
<!--****************************************************-->
<pl:Product>
<pl:SystemIdentifier type="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:ProductName descriptionId="1">Dinning Table</pl:ProductName>
<cat catId="1"/>
<cat catId="2"/>
<cat catId="3"/>
</pl:Product>
<pl:Product>
<pl:SystemIdentifier type="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:ProductName descriptionId="1">Dinning Table</pl:ProductName>
<cat catId="1"/>
<cat catId="3"/>
<cat catId="4"/>
</pl:Product>
<pl:Product>
<pl:SystemIdentifier type="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:ProductName descriptionId="1">Dinning Table</pl:ProductName>
<cat catId="1"/>
<cat catId="2"/>
<cat catId="3"/>
</pl:Product>
<pl:Product>
<pl:SystemIdentifier type="GUID">DA7FDAFD-B049-45DB-9FFA-3F5CB834328D</pl:SystemIdentifier>
<pl:SystemIdentifier name="UPC">4236483268</pl:SystemIdentifier>
<pl:ProductName descriptionId="1">Dinning Table</pl:ProductName>
<cat catId="1"/>
<cat catId="3"/>
<cat catId="4"/>
</pl:Product>
</pl:Submission>
</ProductList>
Der Trick ist, dass ich keine wiederholenden Werte in den pl:Description
oder pl:category
Tags haben kann. Es ist erforderlich, dass sich die Produktelemente wiederholen, wenn sie in den Dateien wiederholt werden. Ich habe die xslt-Vorlagen erstellt, um alles zu konstruieren, einschließlich der Beschreibungen und Kategorien, aber es tut es für jede Datei. Ich brauche es einmal die Beschreibungen und Kategorien zu erstellen, einschließlich der eindeutigen Daten aus allen Dateien und dann alle Produktelemente. Hier ist was ich bisher habe, welches die Produktelemente baut.
<xsl:template match="/">
<xsl:for-each select="/files/file">
<xsl:apply-templates select="document(.)/ProductList/pl:Request"/>
</xsl:for-each>
</xsl:template>
Da dies ziemlich lange schon ist, werde ich nur sagen, dass die Anfrage Vorlage, um die Produktelemente erstellen funktioniert und ich habe eine „Produktliste“ Vorlage, die die Beschreibungen und Kategorien Elementstruktur schaffen. Hier
Wenn Sie mehrere Dateien zusammenführen müssen, zeigen Sie uns zwei minimale Beispiele und das zusammengeführte Ergebnis und erläutern Sie, welche Kriterien Sie zusammenführen möchten. –
Ich habe bearbeitet, um ein anderes Beispiel der Datei einzuschließen (sie sind fast identisch), das ist repräsentativ dafür, wie die Daten in den tatsächlichen XML-Dateien sind. Ich fasse alle Dateien und Daten zusammen. Es gibt keine Kriterien zum Filtern von "Produkten". –
Können Sie 'exsl: node-set' oder ähnliches verwenden? Oder ist das jenseits von "reinem" XSLT 1.0? –