基于xml标签的XSLT模板条件来更新XML字符串标签

问题描述 投票:0回答:1

我对 XSLT 1.0 有一个独特的问题。下面是我的输入 XML。

XML
15024734061$118.2307/15/2024]]> 是 氮

输出 XML :

根据贷方或借方标签的值为 Y,应将金额显示为贷方:$118.23 或借方:$118.23 作为标签。

如果信用标签的值为 Y ,则 XML 字符串标签应具有信用标签,后跟金额,如下所示:

<xml>
    <![CDATA[<format>1</format><account>5024734061</account><credit>$118.23</credit><dueDate>07/15/2024</dueDate>]]>
</xml> 
xml xslt
1个回答
0
投票

要在纯 XSLT 1.0 中执行此操作,您必须执行以下操作:

<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" cdata-section-elements="xml"/>

<xsl:template match="/request">
    <xsl:variable name="type" select="name((credit|debit)[.='Y'])"/>
    <xml>   
        <xsl:call-template name="replace">
            <xsl:with-param name="string" select="normalize-space(xml)"/>
            <xsl:with-param name="search-string" select="'amount'"/>
            <xsl:with-param name="replace-string" select="name((credit|debit)[.='Y'])"/>
        </xsl:call-template>
    </xml>
</xsl:template>

<xsl:template name="replace">
    <xsl:param name="string"/>
    <xsl:param name="search-string"/>
    <xsl:param name="replace-string"/>
    <xsl:choose>
        <xsl:when test="contains($string, $search-string)">
            <xsl:value-of select="substring-before($string, $search-string)"/>
            <xsl:value-of select="$replace-string"/>
            <xsl:call-template name="replace">
                <xsl:with-param name="string" select="substring-after($string, $search-string)"/>
                <xsl:with-param name="search-string" select="$search-string"/>
                <xsl:with-param name="replace-string" select="$replace-string"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$string"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>

这当然是假设原始

xml
有效负载除了
"amount"
“元素”名称之外不包含子字符串
amount

© www.soinside.com 2019 - 2024. All rights reserved.