Замена XML на XSL - PullRequest
       3

Замена XML на XSL

0 голосов
/ 06 декабря 2010

Привет. Я пытаюсь преобразовать файл XML FpML 4 в FpML 5.

Единственное, что мне нужно изменить, - это заголовок FpML. Ниже приведен пример:

входной файл FpML4

     <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-учебники, но ничего не помогло.Любые идеи, которые кто-либо будет приветствоваться.

@ Обновление:

Пока просто чтобы увидеть, как это работает, я попробовал этот 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>

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Эта таблица стилей:

<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 голос
/ 06 декабря 2010

Вот пример таблицы стилей, которая выполняет изменение входной выборки, которую вы запрашивали:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...