2010-12-06 6 views
0

Привет Я пытаюсь преобразовать XML-файл FpML 4 к FpML 5.XML с 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? Каковы были ошибки? –

+0

@Dave Jarvis: Потому что я должен использовать XSL для этого. И никакая ошибка просто не может преобразовать XML в любом случае. – inglor

+0

Покажите нам XSL, который вы использовали. –

ответ

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> 

Edit: Лучше с пространством имен по умолчанию ...

+0

Хорошо отлично работает. У меня тоже была идея об пространствах имен, но я не знал, как их использовать. Спасибо – inglor

+0

@ingor: Вы хорошо. Спросите в любое время. –

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> 

Является ли такое простое преобразование достаточным для выполнения схемы, которую я вообще не проверял.

+0

Это тоже работает. Спасибо. – inglor