我想在以下逻辑中设计我的xslt。请帮帮忙:
计算物品数量。
如果position()大于拆分计数,请检查先前和当前节点值是否相同(在这种情况下为MATNR)。
如果值相同,请勿中断。只有在价值不同后才能中断。
如果值不同,请中断。
休息后,再次启动计数器,直到达到分割计数。
实施例: 拆分数= 3
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Material>
<Item><MATNR>22</MATNR></Item>
<Item><MATNR>22</MATNR></Item>
<Item><MATNR>24</MATNR></Item>
<Item><MATNR>24</MATNR></Item>
<Item><MATNR>25</MATNR></Item>
<Item><MATNR>26</MATNR></Item>
<Item><MATNR>27</MATNR></Item>
<Item><MATNR>28</MATNR></Item>
<Item><MATNR>29</MATNR></Item>
<Item><MATNR>10</MATNR></Item>
</Material>
并输出如:
<?xml version="1.0" encoding="UTF-8"?>
<Material>
<Item><MATNR>22</MATNR></Item>
<Item><MATNR>22</MATNR></Item>
<Item><MATNR>24</MATNR></Item>
<Item><MATNR>24</MATNR></Item>
</Material>
<Material>
<Item><MATNR>25</MATNR></Item>
<Item><MATNR>26</MATNR></Item>
<Item><MATNR>27</MATNR></Item>
</Material>
<Material>
<Item><MATNR>28</MATNR></Item>
<Item><MATNR>29</MATNR></Item>
<Item><MATNR>10</MATNR></Item>
</Material>
先谢谢。
答案 0 :(得分:0)
你所描述的不是“逻辑”,它是一种程序算法。程序算法不是编写XSLT的好起点,因为它不是一种过程语言。对你的问题的陈述性描述将是(我认为):
将项目拆分为组(保留顺序),以便每个组具有满足约束条件的最小项目数量:(a)组包含至少3个项目;(b)具有相同MATNR的两个项目始终进入同组。
所以这是一个分组问题,这通常意味着XSLT 2.0的解决方案比1.0的解决方案容易得多。但实际上我认为它略微超出了XSLT 2.0的xsl:for-each-group指令的功能。
这意味着你将不得不使用兄弟递归。你可以通过搜索StackOverflow找到一些兄弟递归的例子:一个好的例子就是这个: