我试图遍历以下XML,以获取基于属性值的列表。可以将@field值作为变量传递给for-each吗?
尝试使用<xsl:for-each select="project[@field='author']/projectValue">
,但最终为每个字段重复了循环
示例XML
<Properties>
<projects>
<project field="author">
<projectValue count="3">disney</projectValue>
<projectValue count="3">mark</projectValue>
</project>
<project field="type">
<projectValue count="6">news</projectValue>
<projectValue count="31">page</projectValue>
</project>
</projects>
</Properties>
XSL
<xsl:template match="/">
<ul class="gta-2">
<xsl:apply-templates select="/Properties/projects" />
</ul>
<ul class="gta-2">
<xsl:apply-templates select="/Properties/projects"/>
</ul>
</xsl:template>
<xsl:template match = "projects" >
<xsl:for-each select="project/projectValue">
<li>
<xsl:value-of select="." />
</li>
</xsl:for-each>
</xsl:template>
输出
<ul class="author">
<li>disney</li>
<li>mark</li>
<li>news</li>
<li>page</li>
</ul>
<ul class="type">
<li>disney</li>
<li>mark</li>
<li>news</li>
<li>page</li>
</ul>
预期产量
<ul class="author">
<li>disney</li>
<li>mark</li>
</ul>
<ul class="type">
<li>news</li>
<li>page</li>
</ul>
答案 0 :(得分:1)
尝试使用这两个模板:
kube-apiserver
其输出是:
<xsl:template match = "project" >
<ul class="{@field}">
<xsl:apply-templates select="projectValue"/>
</ul>
</xsl:template>
<xsl:template match = "projectValue" >
<li><xsl:value-of select="." /></li>
</xsl:template>
这可能是创建所需输出的最直接方法。无需传递任何属性。每个(属性)值都在相应的模板中处理。清晰明了。