如何使用XSL处理数据?优化相同Y值重复输出问题
优化XSL输出避免重复Y值的方案
嘿,这个问题很常见,咱们可以通过两种简单的方式来优化输出,避免Y值重复打印。先说明下:你的XML里是<A>元素,但XSL模板匹配的是Identity,这里可能是笔误,我会基于匹配<A>元素来给出方案,你可以根据实际结构调整匹配规则。
方法一:分离X和Y的输出(推荐,逻辑更清晰)
既然所有<A>的Y值都一致,咱们可以先遍历所有<A>输出X,然后单独输出一次Y即可:
<!-- 主模板,控制整体输出逻辑 --> <xsl:template match="/"> <!-- 遍历所有A元素,只输出X --> <xsl:apply-templates select="A" mode="Insureds-X"/> <!-- 只输出一次Y,取第一个A的Y值(因为所有Y都相同) --> Y : <xsl:value-of select="A[1]/Y"/> </xsl:template> <!-- 专门输出X的模板 --> <xsl:template match="A" mode="Insureds-X"> X : <xsl:value-of select="X"/> </xsl:template>
这样输出结果就是:
X : P
X : Q
Y : R
方法二:在循环中添加条件判断
如果想保留原有的循环结构,只需要在输出Y的时候加个判断,只有第一次循环时才输出Y:
<xsl:template match="A" mode="Insureds"> X : <xsl:value-of select="X"/> <!-- 仅当当前是第一个A元素时输出Y --> <xsl:if test="position() = 1"> Y : <xsl:value-of select="Y"/> </xsl:if> </xsl:template>
输出结果会是:
X : P
Y : R
X : Q
额外提示
如果你的XML有父容器(比如根元素是<Root>),记得把select="A"改成select="Root/A",保证能正确选中目标元素。另外,如果Y值的一致性是动态的(不是固定都相同),可以用<xsl:distinct-values>来提取唯一的Y值再输出,不过你已经明确Y值一致,前面的方法就足够啦。
内容的提问来源于stack exchange,提问作者Shubham Pathak
相关产品推荐
相关产品推荐

