gpt4 book ai didi

xslt - XSLT 中的位置字符串拆分

转载 作者:行者123 更新时间:2023-12-04 04:41:21 27 4
gpt4 key购买 nike

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

<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>

最佳答案

您可以使用 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)&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>

关于xslt - XSLT 中的位置字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com