在下面的代码片段中,我有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>
答案 0 :(得分:2)
如果不知道输入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>
编辑:我刚注意到文档(@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>