我有一个XML文件:
<manual>
<chapter>
<section />
<section />
<section />
</chapter>
<chapter>
<section>
<section />
<section />
<section />
<section />
<section />
<section />
<section />
<section />
<section />
<section />
</section>
<section />
<section />
</chapter>
</manual>
在我处理<manual>
节点时,我想知道是否有一个<section>
节点有超过9个子节点。
我最初的做法是:
if test="//section[count(child::section > 9)]"
这不起作用,因为count()的输出是一个整数,而section []需要一个节点集。
像count(// section / section)这样的东西不会起作用,因为它会计算所有部分,而不仅仅是一组兄弟。
有没有办法实现这个目标?
答案 0 :(得分:2)
我认为你想要//section[count(section) > 9]
,比较运算符不属于count
函数调用,就像你拥有它一样。
答案 1 :(得分:0)
你可以使用count(./ section)+ count(./ section / section)来查找该节的总数,下面是用于了解节点位置和节数的代码
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:for-each select="/manual/chapter">
<xsl:if test="count(./section) + count(./section/section) > 9">
<xsl:value-of select="position()"/>,<xsl:value-of select="count(./section) + count(./section/section) "/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>