这是我的Xml文档(小snippt)。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p> <!-- Current Node -->
<w:r>
<w:pict>
<w:shape>
<w:txbxContent>
<w:p>
<w:r>
<w:t>Table 11: Tanjavur NREGS activities
</w:t>
</w:r>
</w:p>
<w:p/>
</w:txbxContent>
</w:shape>
</w:pict>
</w:r>
<w:r>
<w:t>CHAPTER IV: Findings and analysis
</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
现在假设,<w:p>
是我当前的处理节点。现在,我想在这里测试一个条件。我的条件是,
如果它(当前处理节点)具有多个具有子<w:p>
的后代<w:r><w:t>
,则只需要在<w:when>
内执行某些功能。
现在我测试了,
<xsl:choose>
<xsl:when test="descendant::w:p[2]">
<!-- here i have to perform some work -->
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
在我上面的xml文档中,当前处理节点有两个后代<w:p>
。但是,只有一个后代<w:p>
有<w:r><w:t>
个孩子。另一个后代<w:p>
是没有的。
但我的上述xslt条件在这种情况下是真的。如何检查后代是否有<w:r><w:t>
个孩子。
请指导我摆脱这个问题...
答案 0 :(得分:2)
使用
<xsl:when test="count(descendant::w:p[w:r/w:t]) > 1">
有子
的多个后代<w:p>
<w:r><w:t>
转换为XPath的当前节点的要求:
<w:p>
- &gt; descendant::w:p
<w:p>
有一个孩子<w:r>
,其中有一个孩子<w:t>
- &gt; w:p[w:r/w:t]
count(...) > 1
答案 1 :(得分:2)
如果它(当前处理节点)具有多个后代
<w:p>
有孩子<w:r><w:t>
然后只有我必须执行一些<w:when>
内的函数。
更有效的解决方案:用作条件指令的test
属性,或者更好地作为匹配模式的谓词:
descendant::w:p[w:r/w:t][2]
仅当上下文节点至少有两个true()
后代时,上述表达式才为w:p
,这样每个后代都有一个w:r
子项,其本身就有w:t
个{{1}}子。