【发布时间】:2021-11-12 06:33:51
【问题描述】:
我正在尝试使用下面给出的 XSLT 伪代码在根节点上与 XML A 匹配的 XML B 下方循环。由于我是 XSLT 新手,请帮忙
XML A:
<P_OUT_PARTNUMBERS>
<Row>
<Column>53</Column>
</Row>
<Row>
<Column>54</Column>
</Row>
</P_OUT_PARTNUMBERS>
XML B:
<P_OUT_PARTNUMBERS>
<Root>
<Field>53</Field>
</Root>
<Root>
<Field>30</Field>
</Root>
</P_OUT_PARTNUMBERS>
XSLT:
<xsl:for-each select="$XMLB/Root">
<xsl:variable name="Fieldvalue" select ="/Field"/>
<xsl:if test="$XMLA/Row[Column = $Fieldvalue]/Column" >
<xsl:value-of select="position()"/>
</xsl:if>
</xsl:for-each>
我想要像下面这样的东西,因为我不想因为 if 条件而失去 position() 的值。即 position() 值应该是 1,2,3,..etc 与我的逻辑我得到 1,3,6,8,..etc 不连续
【问题讨论】:
-
如果两个样本正好有两个项目(即
Root和Row元素)要比较,则不清楚1,2,3的所需结果与什么相关。所以也许用简单的英语解释你想要选择哪些元素,或者输入应该如何映射到一个整数序列,比如1,2,3。如果您的代码给出了1,3,6,8,那么请发布最小但完整的工作示例来证明这一点。 -
position() for-each 循环中的函数必须给出 1,2,3.. 即连续数字。现在我在 for-each 循环中有 if 条件,因为 position() 值没有给出连续的数字
-
您在
xsl:if内部使用<xsl:value-of select="position()"/>,如果这不是您想要的,则将其移到外面。但我建议您停止考虑“循环”,而是尝试解释您想要选择哪些输入节点以及如何将它们映射到确切的输出序列。 -
我想输出 position() 值。我希望这个 position() 在 if 条件之后返回 1,2,3,4...等。如果条件满足,那么 position() 值会增加,我不想发生这种情况
-
我们错过了与您的输入文件相对应的所需输出。请编辑您的问题以添加缺失的信息。