Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XSLT(或分组元素)中使用无序标记_Xslt_Xslt 1.0 - Fatal编程技术网

在XSLT(或分组元素)中使用无序标记

在XSLT(或分组元素)中使用无序标记,xslt,xslt-1.0,Xslt,Xslt 1.0,是否可以使用1.0在XSLT中使用无序标记?我最初的猜测并非如此,因为它打破了XML的规则 考虑具有X元素的XML数据,我想将这些X项在单个块中拆分为3个块。我想做的是这样的事情,但显然这是完全无效的代码 <div> <xsl:for-each select="mydata"> <xsl:value-of select="myvalue"/><br/> <xsl:if test="(position() mod 3)=0"

是否可以使用1.0在XSLT中使用无序标记?我最初的猜测并非如此,因为它打破了XML的规则

考虑具有X元素的XML数据,我想将这些X项在单个
块中拆分为3个块。我想做的是这样的事情,但显然这是完全无效的代码

<div>
  <xsl:for-each select="mydata">
    <xsl:value-of select="myvalue"/><br/>
    <xsl:if test="(position() mod 3)=0">
      </div> <!-- This is invalid -->
      <div> <!-- This is invalid -->
    </xsl:if>
  </xsl:for-each>
</div>


对于8个元素,示例结果是

<div>
  value1<br/>
  value2<br/>
  value3<br/>
</div>
<div>
  value4<br/>
  value5<br/>
  value6<br/>
</div>
<div>
  value7<br/>
  value8<br/>
</div>

值1
值2
值3
值4
值5
值6
值7
值8
如果上述情况根本不可能(我怀疑不可能),有人能提出一种可以接受的方式来将他们这样分组吗

(请注意,这必须是XSLT 1.0解决方案)

您试图做的是可能的,但这不是一个好主意。这是一个更好的方法:

<xsl:apply-templates select="mydata[position() mod 3 = 1]" mode="group" />

<!-- Separate templates -->
<xsl:template match="mydata" mode="group">
  <div>
    <xsl:apply-templates select=". | following-sibling::mydata[position() &lt; 3]" />
  </div>
</xsl:template>

<xsl:template match="mydata">
  <xsl:value-of select="myvalue"/><br/>
</xsl:template>


您试图做的是可能的,但这不是一个好主意。这是一个更好的方法:

<xsl:apply-templates select="mydata[position() mod 3 = 1]" mode="group" />

<!-- Separate templates -->
<xsl:template match="mydata" mode="group">
  <div>
    <xsl:apply-templates select=". | following-sibling::mydata[position() &lt; 3]" />
  </div>
</xsl:template>

<xsl:template match="mydata">
  <xsl:value-of select="myvalue"/><br/>
</xsl:template>



jlRish她向您展示了解决方案

您的问题是,您将样式表视为编写开始和结束标记。XSLT并不是这样做的:它编写一个树。不能将半个节点写入结果树。考虑节点,而不是标签


当您遇到输出结构与输入结构不完全匹配的问题时,另一个有用的经验法则是样式表的结构应该反映输出的树结构,而不是输入的树结构。不要想“我应该如何处理下一个ABC输入节点”,而是想“我需要在结果树中生成一个XYZ节点,我应该如何计算它的内容?”。

jlRish她向您展示了解决方案

您的问题是,您将样式表视为编写开始和结束标记。XSLT并不是这样做的:它编写一个树。不能将半个节点写入结果树。考虑节点,而不是标签


当您遇到输出结构与输入结构不完全匹配的问题时,另一个有用的经验法则是样式表的结构应该反映输出的树结构,而不是输入的树结构。不要想“我应该如何处理下一个ABC输入节点”,而是想“我需要在结果树中生成一个XYZ节点,我应该如何计算其内容?”

太好了-非常感谢JLRishe。祝贺你完成10公里:-太棒了-非常感谢你。祝贺你10公里:-谢谢你,迈克尔。。。非常好的建议,我将尝试改变我对XSLT开发的态度谢谢Michael。。。非常好的建议,我将尝试改变我对XSLT开发的态度