java - 跳过 xsl:for-each 迭代时 xsl:number 递增
问题描述
我有 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 的块被跳过,但计数器仍然考虑这个迭代并且无论如何都会递增!现在我明白了:
<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()}">
。
推荐阅读
- ruby-on-rails - Rails:如何在 Rails 5.2.1 中实现动作文本?
- javascript - 两种货币的货币换算
- clang - Macports 和 LC_VERSION_MIN_MACOSX
- reactjs - 如何在 Material UI 中定位表单对话框?
- python - 在 python 中导入 gTTS
- r - 复制的噩梦,根据另一个文件夹中的文件选择要复制的文件
- r - 如何使用 bayesboot() 计算 95% 置信区间
- python - 字典中的值和键之间的计算
- node.js - 在 express-subdomain 中配置子域?
- typo3 - 无法激活typo3 扩展程序