在xsl:for-each上选择多项

时间:2019-10-29 10:24:47

标签: xml xslt xpath

我想选择多个节点,但是select方法的xsl:for-each仅检索到第一个节点。

这是我的代码:

<div STYLE="height=100%;width=100%;overflow:visible;" id="VIEW1">
<table>
<tbody>
    <xsl:for-each select="//FUNCTION|PROPERTY[not(@toc) or @toc!='false']|CLASS|EVENT">
        <xsl:sort select="@name"/>
        <tr>
            <td>
                <a> <xsl:attribute name="HREF">f_content.html#<xsl:value-of select="user:getId(.)"/></xsl:attribute>    <xsl:attribute name="TARGET">FRAMECONTENT</xsl:attribute><xsl:value-of select="@name"/></a>
            </td>
        </tr>
    </xsl:for-each>
</tbody>
</table>
</div>

问题位于此处,它仅选择所有FUNCTION个节点。 :

<xsl:for-each select="//FUNCTION|PROPERTY[not(@toc) or @toc!='false']|CLASS|EVENT">

如何更改此行以检索所有其他节点? 再次感谢!

1 个答案:

答案 0 :(得分:1)

您必须为所有需要选择的节点添加//或相对路径

<xsl:for-each select="//FUNCTION|//PROPERTY[not(@toc) or @toc!='false']|//CLASS|//EVENT">

另一种方法是使用self轴,这可能会更有效

<xsl:for-each select="//*[self::FUNCTION|self::PROPERTY[not(@toc) or @toc!='false']|self::CLASS|self::EVENT]">

如果您使用的是XSLT 2.0,还有一个选择

<xsl:variable name="nodenames" select="'FUNCTION','CLASS','EVENT'"/>
<xsl:for-each select="//*[name()=$nodenames or self::PROPERTY[not(@toc) or @toc!='false']]">