2010-12-06 98 views
0

你好我想的FpML 4的XML文件轉換爲FpML的5XML替換XSL

我必須要改變的唯一事情是FpML的頭 這裏如下的例子:

輸入文件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> 

現在生成的文件應該是這樣的:

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

我嘗試了XSL教程,沒有什麼幫助。 任何人都會受到歡迎。

@Update:

現在只看到它的工作,我想這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> 

感謝

+0

那你試試用XSL?有什麼錯誤? – 2010-12-06 15:40:06

+0

@Dave Jarvis:因爲我必須爲它使用XSL。無論如何,沒有錯誤只是無法轉換XML。 – inglor 2010-12-06 15:43:46

+0

向我們展示您使用的XSL。 – 2010-12-06 16:18:02

回答

2

這個樣式表:

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

輸出:

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

編輯:更好地與默認命名空間...

1

下面是一個簡單的樣式表,做了輸入的變化你要求的樣品:

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

這樣一個簡單的轉換是否足以滿足我根本沒有檢查過的模式。