在下面的代码片段中,我有 3 个 for-each,但在我看来它们应该能够合并为一个。它按原样工作,但我想知道是否有人知道更优雅的编写方式?
<xsl:for-each select="/essentials/webservice">
<xsl:for-each select="document(@filename)/productSearchResponse/products/product">
<xsl:sort select="producingRegion" order="ascending"/>
<xsl:for-each select="producingRegion[not(preceding::producingRegion=.)]">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
最佳答案
如果不知道输入 XML 的预期结果和结构,很难给出答案,但我相信这应该可行。
<xsl:for-each select="/essentials/webservice">
<xsl:for-each select="document(@filename)/productSearchResponse/products/product/producingRegion[not(preceding::producingRegion=.)]">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:for-each>
编辑:我刚刚注意到 document(@filename) 是函数调用,而不是节点测试。在这种情况下,我认为您需要两个 for-each
es。
您可以通过在 XPath 表达式中使用双斜杠来使其更加简洁,但我倾向于认为这不是一个很好的做法:
<xsl:for-each select="/essentials/webservice">
<xsl:for-each select="document(@filename)//producingRegion[not(preceding::producingRegion=.)]">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:for-each>
关于xslt - 这个 XSLT 片段可以更简洁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162242/