【问题标题】:Multiple select on xsl:for-eachxsl:for-each 上的多项选择
【发布时间】:2019-10-29 10:24:47
【问题描述】:

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

这是我的代码:

<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">

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

【问题讨论】:

    标签: xml xslt xpath


    【解决方案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']]">
    

    【讨论】:

    • 完美!谢谢你@Greenev
    猜你喜欢
    • 2010-12-10
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2012-09-10
    相关资源
    最近更新 更多