2010-12-06 9 views
0

Salut, je suis en train de convertir un fichier XML de FpML 4 à FpML 5.remplacement XML avec XSL

La seule chose que je dois changer est l'en-tête FpML suit Voici un exemple:

fichier d'entrée

FpML 4

 <FpML version="4-0" xsi:type="DataDocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fpml.org/2003/FpML-4-0 ../fpml-main-4-0.xsd" xmlns="http://www.fpml.org/2003/FpML-4-0"> 
      <trade>...</trade> 
      <party id="partyA">...</party> 
      <party id="partyB">...</party> 
    </FpML> 

maintenant, le fichier résultant devrait ressembler à:

 <dataDocument xmlns="http://www.fpml.org/FpML-5/confirmation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" fpmlVersion="5-0" xsi:schemaLocation="http://www.fpml.org/FpML-5/confirmation ../../fpml-main-5-0.xsd"> 
      <trade>...</trade> 
      <party id="partyA">...</party> 
      <party id="partyB">...</party> 
    </dataDocument> 

J'ai essayé avec des tutoriels XSL et rien n'a vraiment aidé. Toutes les idées seraient les bienvenues.

@Update:

Pour l'instant, juste pour voir ça marche j'ai essayé cette XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

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

<xsl:template match="FpML"> 
    <xsl:element name="test"> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

Merci

+0

Qu'est-ce que vous essayez avec XSL? Quelles étaient les erreurs? –

+0

@Dave Jarvis: Parce que je dois utiliser XSL pour cela. Et aucune erreur ne peut tout simplement pas transformer le XML de toute façon. – inglor

+0

Montrez-nous le XSL que vous avez utilisé. –

Répondre

2

Cette feuille de style:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fpml4="http://www.fpml.org/2003/FpML-4-0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.fpml.org/FpML-5/confirmation" 
exclude-result-prefixes="fpml4"> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="fpml4:FpML"> 
     <dataDocument fpmlVersion="5-0" 
         xsi:schemaLocation= 
     "http://www.fpml.org/FpML-5/confirmation ../../fpml-main-5-0.xsd"> 
      <xsl:apply-templates select="node()"/> 
     </dataDocument> 
    </xsl:template> 
    <xsl:template match="fpml4:*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

Sortie:

<dataDocument fpmlVersion="5-0" 
xsi:schemaLocation="http://www.fpml.org/FpML-5/confirmation ../../fpml-main-5-0.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.fpml.org/FpML-5/confirmation"> 
    <trade>...</trade> 
    <party id="partyA">...</party> 
    <party id="partyB">...</party> 
</dataDocument> 

Modifier: mieux avec un espace de noms par défaut ...

+0

Ok super bien travailler. J'ai aussi eu l'idée des espaces de noms mais je ne sais pas comment les utiliser. Merci – inglor

+0

@ingor: Vous êtes bienvenu. Demander n'importe quand. –

1

Voici une feuille de style exemple qui fait le changement de l'entrée échantillon que vous avez demandé:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fpml4="http://www.fpml.org/2003/FpML-4-0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.fpml.org/FpML-5/confirmation" 
    exclude-result-prefixes="fpml4" 
    version="1.0"> 

    <xsl:template match="fpml4:*"> 
    <xsl:element name="{name()}"> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="fpml4:FpML"> 
    <dataDocument fpmlVersion="5-0" xsi:schemaLocation="http://www.fpml.org/FpML-5/confirmation ../../fpml-main-5-0.xsd"> 
     <xsl:apply-templates/> 
    </dataDocument> 
    </xsl:template> 

    <xsl:template match="@* | text() | comment() | processing-instruction()"> 
    <xsl:copy/> 
    </xsl:template> 

</xsl:stylesheet> 

Si une simple transformation est suffisante pour satisfaire le schéma, je n'ai pas vérifié du tout.

+0

Cela fonctionne aussi bien. Merci. – inglor