Hoffe, dass du die Hilfe eines Gurus findest, um das nächste Problem herauszufinden.XSLT Gouping, für jede und betroffene Schleife. Wie duplikate eliminieren?
Ich habe zwei XML-Dateien. Firts hier ein (text.xml):
<text>
<ref>Author1, Title1, Date1</ref>
<ref>Author75, Title75, Date2</ref>
<ref>Author2, Title2, Date2</ref>
<ref>Author3, Title3, Date3</ref>
<text>
und die zweite so (list.xml):
<list>
<bibl xml:id="1"><author>Author1</author><date>Date1</date></bibl>
<bibl xml:id="2"><author>Author2</author><date>Date2</date></bibl>
<bibl xml:id="3"><author>Author3</author><date>Date3</date></bibl>
</list>
I text.xml und die Prüfung abfragen möchten gegen list.xml hinzufügen @xml: id (von list.xml) bis <ref>
(von text.xml) wic h enthält den gleichen Autor und das gleiche Datum. Wenn nicht, dann kopieren Sie das Original <ref>
.
Deshalb möchte ich erhalten:
<ref xml:id="1">Author1, Title1, Date1</ref>
<ref>Author75, Title75, Date2</ref>
<ref xml:id="2>Author2, Title2, Date2</ref>
etc.
Mein XSLT zu identifizieren und alle correpondence:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ref">
<xsl:variable name="ref" select="."/>
<xsl:for-each select="document('list.xml')//bibl">
<xsl:variable name="bibl" select="."/>
<xsl:variable name="author" select="author"/>
<xsl:variable name="date" select="date"/>
<xsl:choose>
<xsl:when test="contains($ref, $author) and contains($ref, $date)">
<ref>
<xsl:attribute name="xml:id">
<xsl:value-of select="$bibl/@xml:id"/>
</xsl:attribute>
<xsl:value-of select="$ref"/>
</ref>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$ref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Aber dann gibt es nicht correpondence es ist nicht nur richtig <ref>
kopieren, sondern kopieren Alle <ref>
die Anzahl der Zeit, die ich habe <bibl>
Knoten in der zweiten Datei.
So Problem ist in <xsl:otherwise><xsl:copy-of select="$ref"/></xsl:otherwise>
. Irgendwelche Ideen, wie ich nur diesen eindeutigen Wert erreichen kann, den ich brauche? Ich weiß, dass es tatsächlich sehr einfach sein muss, und ich probiere key, generate-id, für jede Gruppe, distinct-values, kann es aber nicht herausfinden.
Vielen Dank! Es funktioniert perfekt! Völlig einverstanden, dass Ihre zweite Lösung viel eleganter und effizienter ist. Aber eigentlich erste XML-Datei (** text.xml **) ist nur ein Beispiel. Die echte '' es ist etwas wie ' J. Smith, Buchtitel, Verlag, 2001, S.211' oder ' Buchtitel, eds. Smith John., 2005 ', usw. Also ich nicht wirklich jetzt, wo ich Autor oder Datum finden kann, alles weiß ich, dass es irgendwo hier ist. Nochmals vielen Dank! –