首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL检查是否有任何子节点具有除带有此标记的子节点之外的文本

XSL检查是否有任何子节点具有除带有此标记的子节点之外的文本
EN

Stack Overflow用户
提问于 2015-11-06 17:30:53
回答 1查看 303关注 0票数 0

我在检查这种情况时遇到了问题:

代码语言:javascript
复制
<xsl:template match="//DIO[not(@NOPRINT) or (@NOPRINT != '1')]"........

<xsl:when test="./text()[. != '']">
  <tr>
     <td >
       <xsl:call-template name="someTemplate"/>
     </td>
  </tr>
</xsl:when

XML是这样的:

代码语言:javascript
复制
<Dokument>
  <DIO>someText1</DIO>
  <DIO NOPRINT="1">SomeNoPrintText</DIO>
  <DIO>
      <PODDIO NOPRINT="1">
          <ITEM>10.10.2010</ITEM>
          <ITEM>10:10</ITEM>
          <ITEM>11.11.2011</ITEM>
          <ITEM>11:11</ITEM>
      </PODDIO>
      <PODDIO></PODDIO>
  </DIO>
  <DIO>
      .....
  </DIO>
</Dokument>

现在,在xsl:when“condition”中,我需要测试test=节点是否包含任何文本(当前条件是这样),但我只需要从没有NOPRINT=1属性的子节点进行测试。我该怎么做?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-11-06 21:39:35

您可以尝试将此表达式用于您的xsl:when

代码语言:javascript
复制
 <xsl:when test=".//text()[not(ancestor::*/@NOPRINT='1')][normalize-space()]">

严格地说,这还将检查当前DIO节点的祖先,而不仅仅是它下面的节点,但它可能满足您的需求。

我在这里还使用了normalize-space()来忽略空白节点(尽管您也可以使用xsl:strip-space元素)。

请注意,您的模板匹配也可以简化为:

代码语言:javascript
复制
<xsl:template match="//DIO[not(@NOPRINT = '1')]">

这是因为只有当NOPRINT首先存在(并且它等于1)时,@NOPRINT = 1才会计算为true。如果没有这样的属性,则表达式将为false,这正是您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33563499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档