我需要一些帮助,以了解如何仅选择具有相同父(或叔叔)元素值的某些节点。我的XML看起来像这样
<shipment>
<goodslines>
<goodsline>
<position>1</position>
<packagenumbers>
<packagenumber>123</packagenumber>
</packagenumbers>
</goodsline>
<goodsline>
<position>1</position>
<packagenumbers>
<packagenumber>456</packagenumbers>
</packagenumbers>
</goodsline>
<goodsline>
<position>2</position>
<packagenumbers>
<packagenumber>789</packagenumbers>
</packagenumbers>
</goodsline>
</goodslines>
</shipment>
,所需的输出将是:
123,456
789
因此,我需要针对“ packagenumber”-级别进行for-each,以便考虑上级的“ position”-元素
XSL可能是这样的吗?
<xsl:for-each select="shipment/goodslines/goodsline[some condition here?]/packagenumbers/packagenumber">
<xsl:value-of select="current()"/>
<xsl:if test="not(position() = last())">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:for-each>
任何帮助将不胜感激。
答案 0 :(得分:-1)
如果您的xml始终具有相同的结构,则可以使用以下结构:
<xsl:template match="goodsline[position = preceding-sibling::goodsline[1]/position]">
<xsl:text>,</xsl:text>
<xsl:value-of select="packagenumbers/packagenumber"/>
</xsl:template>
<xsl:template match="goodsline">
<xsl:text>
</xsl:text>
<xsl:value-of select="packagenumbers/packagenumber"/>
</xsl:template>
更具体的模板(带有条件的模板)将始终优先出现并具有更高的优先级。 for-each-group可能还有另一个简单的解决方案。