2017-04-10 2 views
2

J'ai essayé de convertir le code XML suivant en un autre document XML en utilisant la feuille de style XSLT que j'ai créée. La sortie ne me donne pas ce que je veux, la sortie n'est pas les bons nœuds xml et ne sort pas les balises.Définition de XSLT pour transformer XML en XML

S'il vous plaît quelqu'un pourrait-il aider.

Le fichier XML à transformer ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 
     <Extract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <Header> 
      <SubscriptionName>Auto_Clients</SubscriptionName> 
      <SubscriptionID>1731</SubscriptionID> 
      <ExecutionID>11987</ExecutionID> 
      <ODIFeed>Clients</ODIFeed> 
      <DataDateTime>2013-07-22T13:53:49</DataDateTime> 
      <FirmCodes> 
      <FirmCode>ZR</FirmCode> 
      </FirmCodes> 
      <Environment>INTEGRATION</Environment> 
      <NoOfRecords>1</NoOfRecords> 
      </Header> 
      <Clients> 
      <Client> 
      <FirmCode>ZR</FirmCode> 
      <ClientReference>ZR1071049</ClientReference> 
      <ClientType>02</ClientType> 
      <ShortName>ZRTEST</ShortName> 
      <FullName>CLTTEST</FullName> 
      </Client> 
      </Clients> 
     </Extract> 

La feuille de style XSLT j'ai créé est ce

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 
     <xsl:template match="table"> 
     <Clients> 
      <xsl:for-each select="Client"> 
      <Client> 
      <FirmCode> 
       <xsl:value-of select="FirmCode" /> 
      </FirmCode> 
      <ClientReference> 
       <xsl:value-of select="ClientReference" /> 
      </ClientReference> 
      <ClientType> 
       <xsl:value-of select="ClientType" /> 
      </ClientType> 
      <ShortName> 
       <xsl:value-of select="ShortName" /> 
      </ShortName> 
      <FullName> 
       <xsl:value-of select="FullName" /> 
      </FullName> 
     </Client> 
     </xsl:for-each> 
     </Clients> 
    </xsl:template> 
    </xsl:stylesheet> 

Ma sortie souhaitée est quelque chose comme:

<Clients> 
     <Client> 
     <FirmCode>ZR</FirmCode> 
     <ClientReference>ZR1071049</ClientReference> 
     <FullName>CLTTEST</FullName> 
     </Client> 
    </Clients> 

Répondre

3

Il n'y a pas d'élément table dans votre saisie pour que votre modèle ne corresponde à aucun d n'est jamais exécuté. Ce que vous voyez est purement le résultat de l'application du built-in template rules.

Vous devez changer:

<xsl:template match="table"> 

à:

<xsl:template match="Extract"> 

changer aussi:

<xsl:for-each select="Client"> 

à:

<xsl:for-each select="Clients/Client"> 

car Client n'est pas un enfant de Extract.

+0

Cela n'a pas changé la sortie, pour une raison quelconque, la sortie que je reçois est du texte, avec toutes les données de noeud en sortie non seulement les nœuds de sélection qui m'intéressent, mais pas de balises non plus. – DBoyDev

+0

@DBoyDev Vous pouvez le voir fonctionner ici: http://xsltransform.net/naZXpWx –

+0

Non, le problème est autre chose - voir: http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work- jusqu'à-i-supprimer-racine-nœud/34762628 # 34762628 –