Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何使用XSLT2.0检查具有当前节点的w:r/w:t子代的所有子代::w:p?_Xml_Xslt_Xpath_Xslt 2.0 - Fatal编程技术网

Xml 如何使用XSLT2.0检查具有当前节点的w:r/w:t子代的所有子代::w:p?

Xml 如何使用XSLT2.0检查具有当前节点的w:r/w:t子代的所有子代::w:p?,xml,xslt,xpath,xslt-2.0,Xml,Xslt,Xpath,Xslt 2.0,这是我的Xml文档(小snippt) 表11:Tanjavur NREGS活动 第四章:调查结果和分析 现在假设,是我当前的处理节点。我的情况是, 如果它(当前处理节点)具有多个子且子的子代,则只有我必须在中执行某些功能 现在我测试了一下 <xsl:choose> <xsl:when test="descendant::w:p[2]"> <!-- here i have to perform some work

这是我的Xml文档(小snippt)


表11:Tanjavur NREGS活动
第四章:调查结果和分析
现在假设,
是我当前的处理节点。我的情况是,

如果它(当前处理节点)具有多个子
且子
的子代,则只有我必须在
中执行某些功能

现在我测试了一下

  <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文档中,当前处理节点有两个子节点
。但是,只有一个后代有子女。另一个后代
为无

但是我上面的xslt条件在这种情况下是正确的。如何检查两个后代是否都有
子代

请引导我摆脱这个问题…

使用

<xsl:when test="count(descendant::w:p[w:r/w:t]) > 1">

多个具有子级的后代

转换为XPath的当前节点的要求:

  • 具有子体
    -->
    子体::w:p
  • 那个
    有一个子
    ,它有一个子
    -->
    w:p[w:r/w:t]
  • 有多个这样的子体-->
    count(…)>1
如果它(当前处理节点)具有多个子体
如果有了孩子,那么只有我需要做一些 内部函数

更有效的解决方案:用作条件指令的
测试
属性,或者更好地用作匹配模式的谓词

   descendant::w:p[w:r/w:t][2]

只有当上下文节点至少有两个
w:p
子节点时,上面的表达式才是
true()
,这样每个子节点都有一个
w:r
子节点,而该子节点本身有一个
w:t
子节点。

+1-如果有多个子节点,则必须有第二个。
   descendant::w:p[w:r/w:t][2]