我有XML消息:
<DataList>
<Datainfo>
<Name>Doc_image.jpg</Name>
<Type>Image</Type>
</Datainfo>
<Datainfo>
<Name>Spec_text1.txt</Name>
<Type>Document</Type>
</Datainfo>
<Datainfo>
<Name>Spec_text2.txt</Name>
<Type>Document</Type>
</Datainfo>
</DataList>
应该将其转换为具有两个要求的另一个XML:
<Datainfo>
块。我的XSL是:
<xsl:template match="//*:DataList">
<xsl:for-each select="./*:Datainfo[./*:Type = 'Document']">
<xsl:variable name="num">
<xsl:number/>
</xsl:variable>
<xsl:if test="$num <= 5">
<xsl:element name="Name{$num}">
<xsl:value-of select="./*:Name"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:template>
带有类型图像的第一个块被跳过,但是计数器仍然考虑该迭代并以递增方式递增!现在我明白了:
<Name2>Spec_text1.txt</Name2>
<Name3>Spec_text2.txt</Name3>
预期结果是:
<Name1>Spec_text1.txt</Name1>
<Name2>Spec_text2.txt</Name2>
我被困在这里,因为据我了解,我无法创建自己的计数器,也无法在需要时递增或递减它,就像在Java中一样。任何帮助表示赞赏。
只需使用<xsl:for-each select="./*:Datainfo[./*:Type = 'Document'][position() le 5]">
和<xsl:element name="Name{position()}">
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句