Domanda

Ciao Sto cercando di convertire un file XML di FpML 4 a FpML 5.

L'unica cosa che devo cambiare è l'intestazione FpML Ecco qui di seguito un esempio:

file di input 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>

Ora il file risultante dovrebbe essere simile:

     <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>

Ho provato con tutorial XSL in giro e nulla di veramente aiutato. Delle idee chiunque sarebbe il benvenuto.

@Update:

Per il momento solo per vedere che sta funzionando Ho provato questo 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>

Grazie

È stato utile?

Soluzione

Questo foglio di stile:

<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>

Output:

<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>

Modifica : Meglio con un default namespace ...

Altri suggerimenti

Ecco un foglio di stile di esempio che fa il cambiamento del campione di input che hai chiesto:

<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>

Se una semplice trasformazione tale è sufficiente a soddisfare lo schema non ho controllato a tutti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top