位置字符串在 XSLT 中拆分



我得到一个看起来像这样的字符串。

<Orders>13091711111100222222003333330044444400</Orders>

字符串的模式是这样的

13 - 09 - 17 - 11111 - 100 - 22222 - 200 - 33333 - 300 - 44444 - 400
year - Month -  day - Ordernumber1 -AMT- Ordernumber2 -AMT - Ordernumber3 -AMT - Ordernumber4 -AMT
第一个6个字符是固定长度(

日期),每个订单摘要后跟8个字符(订单号(5个固定长度)和金额(3个固定长度)的组合)

订单数量有时可以是 2 或 10 个或其他任何东西。

使用 XSLT 时,输出应如下所示。

<root>
<date>130917</date>
<OrderList>
<order>
    <OrderNumber>11111</OrderNumber>
    <OrderAmount>100</OrderAmount>
</order>
<order>
        <OrderNumber>22222</OrderNumber>
    <OrderAmount>200</OrderAmount>
</order>
<order>
    <OrderNumber>33333</OrderNumber>
    <OrderAmount>300</OrderAmount>
</order>
<order>
    <OrderNumber>44444</OrderNumber>
    <OrderAmount>400</OrderAmount>
</order>

你可以为此使用子字符串:

<xsl:value-of select="substring($Orders, 1, 6)" />

上面会得到日期。

现在你必须得到所有的订单,问题是使用子字符串你必须手动执行此操作,就像这样:

<xsl:value-of select="substring($Orders, 7, 5)" />   <!-- Order number 1 -->
<xsl:value-of select="substring($Orders, 12, 3)" />  <!-- Order amount 1 -->
<xsl:value-of select="substring($Orders, 15, 5)" />  <!-- Order number 2 -->
<xsl:value-of select="substring($Orders, 20, 3)" />  <!-- Order amount 2 -->
<xsl:value-of select="substring($Orders, 23, 5)" />  <!-- Order number 3 -->
<xsl:value-of select="substring($Orders, 28, 3)" />  <!-- Order amount 3 -->
<xsl:value-of select="substring($Orders, 31, 5)" />  <!-- Order number 4 -->
<xsl:value-of select="substring($Orders, 36, 3)" />  <!-- Order amount 4 -->
<xsl:value-of select="substring($Orders, 39, 5)" />  <!-- Order number 5 -->
<xsl:value-of select="substring($Orders, 44, 3)" />  <!-- Order amount 5 -->

其次,您可以在 XSLT 中执行以下操作:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mypref="micorsoft.com/BizTalk/xslt">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="@*|node()">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:template>
    <xsl:template match="mypref:data">
        <root>
            <xsl:apply-templates select="@*|node()"/>
        </root>
    </xsl:template>
    <xsl:template match="mypref:Orders">
        <date>
            <xsl:value-of select="substring(., 1, 6)"/>
        </date>
        <OrderList>
            <xsl:call-template name="myOrderList">
                <xsl:with-param name="str" select="substring(., 7)" />
            </xsl:call-template>
        </OrderList>
    </xsl:template>
    <xsl:template name="myOrderList">
        <xsl:param name="str"/>
        <xsl:param name="line-length" select="9"/>
        <order>
            <OrderNumber><xsl:value-of select="substring($str, 1, 5)" /></OrderNumber>
            <OrderAmount><xsl:value-of select="substring($str, 6, 3)" /></OrderAmount>
        </order>
        <xsl:choose>
            <xsl:when test="string-length($str)&gt;$line-length">
                <xsl:call-template name="myOrderList">
                    <xsl:with-param name="str" select="substring($str,$line-length)"/>
                    <xsl:with-param name="line-length" select="$line-length"/>
                </xsl:call-template>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新