2009-10-02 9 views
8

Tengo dos archivos xml. Necesito fusionarlos juntos donde el elemento "myid" coincide entre los dos. Por favor, echa un vistazo a los ejemplos ...XSLT: una forma simple de combinar archivos xml

file1.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    </data> 
</catalog> 

file2.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    <myid>1</myid> 
    </data> 

    <data> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    <myid>2</myid> 
    </data> 
</catalog> 

El archivo resultante se vería así:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    </data> 
</catalog> 
+0

Relacionados: http://stackoverflow.com/questions/1430710/two-xml-in-one-xslt –

+1

@dacracot: Los archivos de entrada tampoco están bien formados. -------- @ nicholas.alipaz: ¿Estamos viendo extractos y no todos los archivos? –

+0

He actualizado mi publicación. Perdón por la confusion. –

Respuesta

4

He estado investigando un poco y encontré una pregunta bastante similar aquí: http://forums.tizag.com/showthread.php?p=76699

Esto es lo que se me ocurrió, esto parece funcionar principalmente, excepto que Firefox no lo reconoce como un archivo xml aunque he agregado el xml: salida.

file1.xml (línea nota de dos, haciendo referencia a nuestra transformación):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="merge.xsl"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    </data> 
</catalog> 

file2.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    <myid>1</myid> 
    </data> 

    <data> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    <myid>2</myid> 
    </data> 
</catalog> 

merge.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" /> 
    <xsl:variable name="with" select="'File2.xml'" /> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="scene"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
     <xsl:variable name="info" select="document($with)/catalog/data[myid=current()/myid]/." /> 
     <xsl:for-each select="$info/*"> 
     <xsl:if test="name()!='myid'"> 
      <xsl:copy-of select="." /> 
     </xsl:if> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

XML de salida cuando se ve Archivo1.xml:

<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    </data> 
</catalog> 
+0

404; la publicación ya no existe –

+0

código de hi C# por favor, – Lijo

+0

@AdamLynch lo siento, busqué una versión en caché de la publicación, pero salió vacía. No era realmente muy importante ya que describí todo lo que se necesitaba arriba. ¡Mejor! –

Cuestiones relacionadas