【发布时间】:2019-12-20 07:38:10
【问题描述】:
我有一个代码可以找到所有子节点(在同一个父节点中)并组合值。
<xsl:template name="GetAllCompanys">
<xsl:param name = "currZOFLFA1"/>
<xsl:for-each select="$currZOFLFA1/*:ZRTLFA1">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="./*:BUKRS"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(', ', ./*:BUKRS)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
此代码运行良好,但现在我需要执行一个操作来检查 如果不同父级之间存在重复值,则应跳过/删除它。 例如:我有一个这样的输入 xml
<DOC BEGIN="1">
<E1WYT3M SEGMENT="1">
<ZOFLFA1 SEGMENT="1">
<WERKS/>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0155</BUKRS>
</ZRTLFA1>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0156</BUKRS>
</ZRTLFA1>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0158</BUKRS>
</ZRTLFA1>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0170</BUKRS>
</ZRTLFA1>
</ZOFLFA1>
</E1WYT3M>
<E1WYT3M SEGMENT="1">
<ZOFLFA1 SEGMENT="1">
<WERKS>MA04</WERKS>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0155</BUKRS>
</ZRTLFA1>
</ZOFLFA1>
</E1WYT3M>
<E1WYT3M SEGMENT="1">
<ZOFLFA1 SEGMENT="1">
<WERKS>MA05</WERKS>
<ZRTLFA1 SEGMENT="1">
<LIFN2>0010002493</LIFN2>
<BUKRS>0156</BUKRS>
</ZRTLFA1>
</ZOFLFA1>
</E1WYT3M>
</DOC>
根据我当前的代码,对于第一个 E1WYT3M 元素,它将从 BUKRS 中选择值并将其相加,这将返回字符串“0155、0156、0158、0170”。
现在,我想检查另一个 E1WYT3M-BUKRS 是否有相同的值,如果是,则应将其删除。
因此,
预期结果将是“0158, 0170”,因为 0155 和 0156 是重复的。
我搜索了很多关于如何查找重复值的讨论,但我不知道在选择时我应该如何删除它。感谢任何帮助
【问题讨论】:
-
请 (1) 将预期结果添加到您的问题中并 (2) 说明您的处理器支持的 XSLT 版本。
-
XSLT 2.0 版
-
请尝试在某个时间回复您收到的答案。
-
只需尝试您的答案并对其进行一些修改。但是我看到您的答案已被删除,无法使其“接受”