Pregunta

Puedo usar xslt 2.0 para transformar datos xml para los archivos xml.He creado xsl para encontrar todos los archivos en una carpeta, la cual ha funcionado muy bien:

filenames.xml

<?xml version="1.0" encoding="UTF-8"?>
<filelist>
   <file>birds2014.xml</file>
   <file>birds2013.xml</file>
</filelist>

A continuación, he creado un xsl para buscar dentro de los archivos xml para seleccionar todos los nombres de las aves que se encuentran en la etiqueta <spbird> en todos los documentos.

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

<xsl:template match="*">
        <xsl:apply-templates/> 
        <xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>
            <xsl:element name="birdname">
                <xsl:for-each select="document($files)">    
                    <xsl:value-of select="//spbird">
                    </xsl:value-of>
                </xsl:for-each>
            </xsl:element>  
    </xsl:template>

Resultado:

<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>

Espera:

<birdname>Papagei</birdname>
<birdname>Wellensittich</birdname>
<birdname>Pfau</birdname>

Alguien puede ayudar?

Editar He cambiado el

 <xsl:template match="*">

a

   <xsl:template match="/">

que resuelve el problema de el mismo resultado que muestra hasta 9 veces (en el que hizo este número de vino).

Ahora, con su ayuda, el resultado es:

<birdname>Papagei Wellensittich</birdname>
<birdname>Pfau</birdname>

Pfau es el pájaro en el segundo archivo xml.El único problema es, que en el documento() parece hacer un para-cada uno en su propio.No tengo pues todas las aves se enumeran por separado en un birdname etiqueta..

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

<xsl:template match="*">
        <xsl:apply-templates/> 
        <xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>

                <xsl:for-each select="document($files)">   
                       <birdname> 
                         <xsl:value-of select="//spbird">
                       </birdname>
                    </xsl:value-of>
                </xsl:for-each>
            </xsl:element>  
    </xsl:template>
¿Fue útil?

Solución

Trate de poner su elemento dentro de la xsl:for-each...

<xsl:for-each select="document($files)">    
    <birdname>
        <xsl:value-of select="//spbird"/>            
    </birdname>
</xsl:for-each>

Nota:A menos que usted está tratando de construir dinámicamente el nombre del elemento, no hay ninguna razón para utilizar xsl:element.

Editar

En XSLT 2.0, xsl:value-of le dará a cada valor de spbird.En lugar de una xsl:for-each en el documento, se debe hacer el para-cada uno en el spbird.Trate de cambiar su xsl:for-each para el ejemplo de abajo.Si eso no funciona, por favor, agregue un ejemplo de las aves archivos a tu pregunta.

<xsl:for-each select="document($files)//spbird">    
    <birdname>
        <xsl:value-of select="."/>            
    </birdname>
</xsl:for-each>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top