Estoy tirando de lo que queda de mi pelo tratando de obtener una búsqueda externa simple trabajando con Saxon 9.1.0.7.XSLT 2.0 Búsqueda externa usando la tecla() y el documento()
Tengo un archivo de fuente simple dummy.xml:
<something>
<monkey>
<genrecode>AAA</genrecode>
</monkey>
<monkey>
<genrecode>BBB</genrecode>
</monkey>
<monkey>
<genrecode>ZZZ</genrecode>
</monkey>
<monkey>
<genrecode>ZER</genrecode>
</monkey>
</something>
A continuación, el archivo de búsqueda es GenreSet_124.xml:
<GetGenreMappingObjectsResponse>
<tuple>
<old>
<GenreMapping DepartmentCode="AAA"
DepartmentName="AND - NEWS AND CURRENT AFFAIRS"
Genre="10 - NEWS"/>
</old>
</tuple>
<tuple>
<old>
<GenreMapping DepartmentCode="BBB"
DepartmentName="AND - NEWS AND CURRENT AFFAIRS"
Genre="11 - NEWS"/>
</old>
</tuple>
... lots more
</GetGenreMappingObjectsResponse>
What I Estoy tratando de lograr es simplemente para agarrar el "Género "valor basado en el valor" DepartmentCode ".
Así que mi XSL se parece a:
...
<!-- Set up the genre lookup key -->
<xsl:key name="genre-lookup" match="GenreMapping" use="@DepartmentCode"/>
<xsl:variable name="lookupDoc" select="document('GenreSet_124.xml')"/>
<xsl:template match="/something">
<stuff>
<xsl:for-each select="monkey">
<Genre>
<xsl:apply-templates select="$lookupDoc">
<xsl:with-param name="curr-label" select="genrecode"/>
</xsl:apply-templates>
</Genre>
</xsl:for-each>
</stuff>
</xsl:template>
<xsl:template match="GetGenreMappingObjectsResponse">
<xsl:param name="curr-genrecode"/>
<xsl:value-of select="key('genre-lookup', $curr-genrecode)/@Genre"/>
</xsl:template>
...
El problema que tengo es que me sale nada. Yo actualmente apenas consigo
<?xml version="1.0" encoding="UTF-8"?>
<stuff>
<Genre/>
<Genre/>
<Genre/>
<Genre/>
</stuff>
he movido todos los datos de búsqueda de ser atributos de GenreMapping, anteriormente como elementos secundarios de GenreMapping cada vez que entré en el partido de la plantilla = "GetGenreMappingObjectsResponse" sería simplemente imprimir todo el texto de cada GenreMapping (DepartmentCode, DepartmentName, Genre)!
No puedo entender por qué estoy equivocado. Cualquier helpo/sugerencia sería muy apreciada.
Aquí encontrará la actual inclusión XSLT real:.
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Define the global parameters -->
<xsl:param name="TransformationID"/>
<xsl:param name="TransformationType"/>
<!-- Specify that XML is the desired output type -->
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!-- Set up the genre matching capability -->
<xsl:key name="genre-lookup" match="GenreMapping" use="@DepartmentCode"/>
<xsl:variable name="documentPath"><xsl:value-of select="concat('GenreSet_',$TransformationID,'.xml')"/></xsl:variable>
<xsl:variable name="lookupDoc" select="document($documentPath)"/>
<!-- Start the first match on the Root level -->
<xsl:template match="/something">
<stuff>
<xsl:for-each select="monkey">
<Genre>
<xsl:apply-templates select="$lookupDoc/*">
<xsl:with-param name="curr-genrecode" select="string(genrecode)"/>
</xsl:apply-templates>
</Genre>
</xsl:for-each>
</stuff>
</xsl:template >
<xsl:template match="GetGenreMappingObjectsResponse">
<xsl:param name="curr-genrecode"/>
<xsl:value-of select="key('genre-lookup', $curr-genrecode, $lookupDoc)/@Genre"/>
</xsl:template>
</xsl:stylesheet>
El TransformationID es todos los días 124 (por lo que se abre el archivo de búsqueda correcta el tipo es simplemente un nombre que actualmente no estoy usando, pero con la intención de
.
¿Qué compilador XSLT está utilizando? – Welbog
Saxon-B 9.1.0.7 –
Figuras. No estoy familiarizado con eso. Tal vez más tarde Tomalak vendrá y te ayudará. ¿Ha funcionado el método sin llave? – Welbog