gpt4 book ai didi

带有索引计数器的 XSLT 过滤器

转载 作者:行者123 更新时间:2023-12-03 15:48:40 24 4
gpt4 key购买 nike

我编写了一些 XSLT,它使用一个 XML 文档来过滤另一个文档。现在我想使用 position() 给我的输出元素编号,但我的过滤条件没有内置在我的 <xsl:for-each> 中,所以 position()给我编号空白的结果。我如何摆脱差距?

<xsl:variable name="Astring">
<a><b>10</b><b>20</b><b>30</b></a>
</xsl:variable>
<xsl:variable name="A" select="msxml:node-set($Astring)" />

<xsl:variable name="Bstring">
<c><d>20</d><d>30</d></c>
</xsl:variable>
<xsl:variable name="B" select="msxml:node-set($Bstring)" />

<e>
<xsl:for-each select="$A/a/b">
<xsl:variable name="matchvalue" select="text()" />
<xsl:if test="count($B/c/d[text() = $matchvalue]) &gt; 0">
<xsl:element name="f">
<xsl:attribute name="i">
<xsl:value-of select="position()" />
</xsl:attribute>
<xsl:copy-of select="text()" />
</xsl:element>
</xsl:if>
</xsl:for-each>
</e>

结果如下:
<e>
<f i="2">20</f>
<f i="3">30</f>
</e>

...但我想要这个:
<e>
<f i="1">20</f>
<f i="2">30</f>
</e>

有什么办法可以合并上面的 <xsl:if>内部过滤测试 <xsl:for-each> select属性?

注意:我见过 this question回复:过滤和 this one re: counters,但前者不给结果编号,后者使用 position()。

最佳答案

是否有任何特殊原因不能将条件包含在 for-each 循环中?

<xsl:for-each select="$A/a/b[$B/c/d = .]">

我在 Visual Studio 中对此进行了测试,并且在此示例中运行良好。

这是输出:
<e>
<f i="1">20</f>
<f i="2">30</f>
</e>

关于带有索引计数器的 XSLT 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com