选择属性中定义了XPath的节点

时间:2014-06-03 16:14:37

标签: xslt xpath

我想使用XPath选择节点,XPath是在同一XML文档的属性中定义的。 示例XML文件:

<section count-node="table/row">
    <table>
        <row>row1</row>
        <row>row2</row>
        <row>row3</row>
    </table>
</section>

现在我想使用XSLT来获取行数,例如

<xsl:template match="section">
    <xsl:variable name="count" select="count({MY VALUE FOR @count-node}})"/>
    <xsl:value-of select="$count"/>
</xsl:template>

其中

count({MY VALUE FOR @count-node}})

应替换为

count(/table/row)

处理样式表时。 这当然应该返回

3

我无法使用&#39; / table / row&#39;在样式表中,因为我不知道元素的内容。它不必是一个表,或者表可能是嵌套的。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果您的XPath表达式相当简单,那么以下内容可能会起作用:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="section">
        <xsl:variable name="expression" select="@count-node" as="node()"/>   
        <xsl:value-of select="count( 
            descendant::*[$expression = 
                          string-join(
                            (ancestor::*[.=$expression/../descendant::*]/name(), 
                             name()),
                            '/')] )"/>
     </xsl:template>
</xsl:stylesheet>

计算所有计算XPath的后代元素(相对于section)等于来自@count-node的XPath。