Преобразуйте XML в XML, используя атрибуты преобразования XSLT для цели XML - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть источник XML, который выглядит следующим образом -

В настоящее время XML выглядит следующим образом:

<FIXML xmlns="http://www.fixprotocol.org/FIXML-4-4" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Order ID="337228967" ID2="2867239" >
    <Instrmt ID="764635" Src="101" CFI="" SecTyp="Swap" SubTyp="Multi-currency IRS" >
    </Instrmt>
    <Stip Typ="TEXT" Val="ASSETALL" />
    <OrdQty Qty="250000" />
  </Order>
</FIXML>

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

<FIXML xmlns="http://www.fixprotocol.org/FIXML-4-4" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Order ID="337228967" ID2="2867239" >
    <Instrmt ID="764635" Src="101" CFI="" SecTyp="Swap" SubTyp="Interest Rate Swap" >
    </Instrmt>
    <Stip Typ="TEXT" Val="ASSETALL" />
    <OrdQty Qty="250000" />
  </Order>
</FIXML>

По сути, я хочу заменить текст SubTyp, когда SubTyp = "Мультивалютный IRS" заменить на SubTyp = "Процентный своп". Если SubType <> «Мультивалютный IRS», вернуть текущее значение.

Я пытаюсь использовать следующий код, но вижу только то же, что и ввод. Я не вижу замены значения

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:f="fixprotocol.org/FIXML-4-4">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="f:Instrmt/@SubTyp">
        <xsl:choose>
        <xsl:when test="f:Instrmt/@SubTyp='Multi-currency IRS'">
            <xsl:text>Interest Rate Swap</xsl:text>
        </xsl:when>
    </xsl:choose>
    </xsl:template>

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

Новое в XSLT. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 24 апреля 2020

Вот как это можно сделать:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:f="http://www.fixprotocol.org/FIXML-4-4">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="f:Instrmt/@SubTyp[.='Multi-currency IRS']">
        <xsl:attribute name="SubTyp">Interest Rate Swap</xsl:attribute>
    </xsl:template>

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

Посмотрите, как это работает здесь: https://xsltfiddle.liberty-development.net/ehVZvvU

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