【问题标题】:replace placeholder with dynamic data用动态数据替换占位符
【发布时间】:2018-04-23 19:25:00
【问题描述】:

是否有使用 XSL 或 java.text.MessageFormat 实现以下目标的通用方法?

【问题讨论】:

    标签: java xslt placeholder


    【解决方案1】:

    如果您输入的 XML 如下:

    <Order OrderNo="T122345">
    <Customer FirstName="John" LastName="Doe" MobileNo="123456789"/>
    <OrderDates>
        <OrderDate Type="PickDate" Name="PickUpdateDate" Value="2017-11-10 10:00:00" />
    </OrderDates>
    </Order>
    

    然后使用 XSL 如下:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml"/>    
        <!--prepare message formatted template as below-->
        <xsl:template name="message">
            <xsl:param name="client.firstname"/>
            <xsl:param name="client.lastname"/>
            <xsl:param name="client.order.no"/>
            <xsl:param name="client.pickup.date"/>
            <xsl:param name="client.mobile.no"/>
            <xsl:variable name="var.h" select="concat('&#xa;', 'hi ', $client.firstname, ' ', $client.lastname, ',', '&#xa;', '', '&#xa;')"/>
            <xsl:variable name="var.b.str1" select="concat('Thanks for your order # is ', $client.order.no, '.', '&#xa;')"/>
            <xsl:variable name="var.b.str2" select="concat('We will send you updates on pick up by ', $client.pickup.date, ' on your mobile # ', $client.mobile.no, '.', '&#xa;')"/>
            <xsl:variable name="var.s" select="concat('', '&#xa;', 'Regards', '&#xa;', 'Team', '&#xa;')"/>           
            <Message>       
                <xsl:value-of select="concat($var.h, $var.b.str1, $var.b.str2, $var.s)"/>    
            </Message>        
        </xsl:template>
        <!--run you formatted message template by call-template function-->
        <xsl:template match="/Order">
            <xsl:call-template name="message">
                <xsl:with-param name="client.firstname" select="./Customer/@FirstName" />
                <xsl:with-param name="client.lastname" select="./Customer/@LastName" />
                <xsl:with-param name="client.order.no" select="./@OrderNo" />
                <xsl:with-param name="client.pickup.date" select="./OrderDates/OrderDate[@Type = 'PickDate' and @Name = 'PickUpdateDate']/@Value" />
                <!--below you can pass city code as below for mobile no-->
                <xsl:with-param name="client.mobile.no" select="concat('91-', ./Customer/@MobileNo)" />
            </xsl:call-template>
        </xsl:template>
    </xsl:stylesheet>
    

    你会达到预期的效果:

    <?xml version="1.0" encoding="UTF-8"?>
    <Message>
    hi John Doe,
    
    Thanks for your order # is T122345.
    We will send you updates on pick up by 2017-11-10 10:00:00 on your mobile # 91-123456789.
    
    Regards
    Team
    </Message>
    

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 2017-09-11
      • 2013-01-24
      • 2013-04-05
      • 2013-04-08
      • 1970-01-01
      • 2017-07-29
      • 2023-04-04
      相关资源
      最近更新 更多