使用XPath选择节点的属性定义(Select nodes with XPath defined i

2019-10-20 05:51发布

我想选择在使用中相同的XML文档中的属性中定义的XPath的节点。 示例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

我不能在样式表中使用“/表/行”,因为我不知道该元素的含量。 它不必是一个表,或者也许嵌套表。

我怎样才能做到这一点?

Answer 1:

如果您的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 )等于从该的XPath @count-node



文章来源: Select nodes with XPath defined in attribute
标签: xslt xpath