【发布时间】:2020-10-26 13:44:56
【问题描述】:
我有 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>
应该将其转换为具有 2 个要求的另一个 XML:
- 只有那些 Type = 'Document' 的
<Datainfo>块。 - 总共不超过 5 个块。 (为此,我使用 xsl:number 作为计数器)
我的 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>
第一个带有 Image 类型的块被跳过了,但是 counter 仍然考虑这个迭代并且无论如何都会递增!现在我明白了:
<Name2>Spec_text1.txt</Name2>
<Name3>Spec_text2.txt</Name3>
预期结果是:
<Name1>Spec_text1.txt</Name1>
<Name2>Spec_text2.txt</Name2>
我被困在这里,因为据我所知,我无法创建自己的计数器并随时增加/减少它,就像在 Java 中一样。 任何帮助表示赞赏。
【问题讨论】: