我得到的字符串看起来像这样。
<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>
答案 0 :(得分:3)
您可以使用substring:
<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)>$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>