如何在XSLT中使用Break条件

时间:2017-03-15 09:34:04

标签: xml xslt

我想在以下逻辑中设计我的xslt。请帮帮忙:

  1. 计算物品数量。

  2. 如果position()大于拆分计数,请检查先前和当前节点值是否相同(在这种情况下为MATNR)。

  3. 如果值相同,请勿中断。只有在价值不同后才能中断。

  4. 如果值不同,请中断。

  5. 休息后,再次启动计数器,直到达到分割计数。

  6. 实施例: 拆分数= 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>
    

    先谢谢。

1 个答案:

答案 0 :(得分:0)

你所描述的不是“逻辑”,它是一种程序算法。程序算法不是编写XSLT的好起点,因为它不是一种过程语言。对你的问题的陈述性描述将是(我认为):

将项目拆分为组(保留顺序),以便每个组具有满足约束条件的最小项目数量:(a)组包含至少3个项目;(b)具有相同MATNR的两个项目始终进入同组。

所以这是一个分组问题,这通常意味着XSLT 2.0的解决方案比1.0的解决方案容易得多。但实际上我认为它略微超出了XSLT 2.0的xsl:for-each-group指令的功能。

这意味着你将不得不使用兄弟递归。你可以通过搜索StackOverflow找到一些兄弟递归的例子:一个好的例子就是这个:

Grouping with no relation