Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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对未分组的xml标记执行foreach循环_Xml_Xslt - Fatal编程技术网

使用xslt对未分组的xml标记执行foreach循环

使用xslt对未分组的xml标记执行foreach循环,xml,xslt,Xml,Xslt,按照我的要求,我不能把它们分组。请帮我找到解决办法 注意:xslt 1.0 XML <item_title>item1</item_title> <item_title>item2</item_title> <item_title>item3</item_title> <item_description>description1</item_description> <item_descrip

按照我的要求,我不能把它们分组。请帮我找到解决办法

注意:xslt 1.0

XML

<item_title>item1</item_title>
<item_title>item2</item_title>
<item_title>item3</item_title>

<item_description>description1</item_description>
<item_description>description2</item_description>
<item_description>description3</item_description>
item1
项目2
项目3
说明1
说明2
说明3
需要的输出:

 <div class="item">
    <div class="item_title">item1</div>
    <div class="item_content">description1</div>
 </div>
 <div class="item">
    <div class="item_title">item2</div>
    <div class="item_content">description2</div>
 </div>
 <div class="item">
    <div class="item_title">item3</div>
    <div class="item_content">description3</div>
 </div>
<xsl:for-each select="item_title">
    <div class="item">
        <div class="item_title">
           <xsl:value-of select="item_title[position()]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[position()]"/> 
        </div>
    </div>
</xsl:for-each>
<xsl:call-template name="iterative">
    <xsl:with-param name="num" select="1" />
    <xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
    <div class="item">
        <div class="item_title">
           <span class="icon_plus">+</span>
           <span class="icon_minus">–</span>
           <xsl:value-of select="item_title[$num]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[$num]"/> 
        </div>
    </div>
    <xsl:call-template name="iterative">
        <xsl:with-param name="num" select="$num + 1" />
        <xsl:with-param name="count" select="$count" />
    </xsl:call-template>
</xsl:if>

项目1
说明1
项目2
说明2
项目3
说明3
我的尝试:

 <div class="item">
    <div class="item_title">item1</div>
    <div class="item_content">description1</div>
 </div>
 <div class="item">
    <div class="item_title">item2</div>
    <div class="item_content">description2</div>
 </div>
 <div class="item">
    <div class="item_title">item3</div>
    <div class="item_content">description3</div>
 </div>
<xsl:for-each select="item_title">
    <div class="item">
        <div class="item_title">
           <xsl:value-of select="item_title[position()]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[position()]"/> 
        </div>
    </div>
</xsl:for-each>
<xsl:call-template name="iterative">
    <xsl:with-param name="num" select="1" />
    <xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
    <div class="item">
        <div class="item_title">
           <span class="icon_plus">+</span>
           <span class="icon_minus">–</span>
           <xsl:value-of select="item_title[$num]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[$num]"/> 
        </div>
    </div>
    <xsl:call-template name="iterative">
        <xsl:with-param name="num" select="$num + 1" />
        <xsl:with-param name="count" select="$count" />
    </xsl:call-template>
</xsl:if>

我找到了我自己的方法,根据我的要求,我找到了更好的方法:

调用迭代函数:

 <div class="item">
    <div class="item_title">item1</div>
    <div class="item_content">description1</div>
 </div>
 <div class="item">
    <div class="item_title">item2</div>
    <div class="item_content">description2</div>
 </div>
 <div class="item">
    <div class="item_title">item3</div>
    <div class="item_content">description3</div>
 </div>
<xsl:for-each select="item_title">
    <div class="item">
        <div class="item_title">
           <xsl:value-of select="item_title[position()]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[position()]"/> 
        </div>
    </div>
</xsl:for-each>
<xsl:call-template name="iterative">
    <xsl:with-param name="num" select="1" />
    <xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
    <div class="item">
        <div class="item_title">
           <span class="icon_plus">+</span>
           <span class="icon_minus">–</span>
           <xsl:value-of select="item_title[$num]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[$num]"/> 
        </div>
    </div>
    <xsl:call-template name="iterative">
        <xsl:with-param name="num" select="$num + 1" />
        <xsl:with-param name="count" select="$count" />
    </xsl:call-template>
</xsl:if>

声明模板:

 <div class="item">
    <div class="item_title">item1</div>
    <div class="item_content">description1</div>
 </div>
 <div class="item">
    <div class="item_title">item2</div>
    <div class="item_content">description2</div>
 </div>
 <div class="item">
    <div class="item_title">item3</div>
    <div class="item_content">description3</div>
 </div>
<xsl:for-each select="item_title">
    <div class="item">
        <div class="item_title">
           <xsl:value-of select="item_title[position()]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[position()]"/> 
        </div>
    </div>
</xsl:for-each>
<xsl:call-template name="iterative">
    <xsl:with-param name="num" select="1" />
    <xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
    <div class="item">
        <div class="item_title">
           <span class="icon_plus">+</span>
           <span class="icon_minus">–</span>
           <xsl:value-of select="item_title[$num]"/> 
        </div>
        <div class="item_content">
            <xsl:value-of select="item_description[$num]"/> 
        </div>
    </div>
    <xsl:call-template name="iterative">
        <xsl:with-param name="num" select="$num + 1" />
        <xsl:with-param name="count" select="$count" />
    </xsl:call-template>
</xsl:if>

+
–

我的输出是html,而不是xmlHTML。html可以被认为是XML的一个子集。您可以在XML中使用任何HTML标记。您不能在这样的谓词中使用
position()
;它失去了上下文。首先把它放到一个变量中,然后使用这个变量。我找到了一个更好的方法,并把它作为答案发布了。我的意思是,关于分组的其他问题的引用与这里的问题无关。