我想使用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;在样式表中,因为我不知道元素的内容。它不必是一个表,或者表可能是嵌套的。
我该怎么做?
答案 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。