我在检查这种情况时遇到了问题:
<xsl:template match="//DIO[not(@NOPRINT) or (@NOPRINT != '1')]"........
<xsl:when test="./text()[. != '']">
<tr>
<td >
<xsl:call-template name="someTemplate"/>
</td>
</tr>
</xsl:whenXML是这样的:
<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属性的子节点进行测试。我该怎么做?
谢谢。
发布于 2015-11-06 21:39:35
您可以尝试将此表达式用于您的xsl:when
<xsl:when test=".//text()[not(ancestor::*/@NOPRINT='1')][normalize-space()]">严格地说,这还将检查当前DIO节点的祖先,而不仅仅是它下面的节点,但它可能满足您的需求。
我在这里还使用了normalize-space()来忽略空白节点(尽管您也可以使用xsl:strip-space元素)。
请注意,您的模板匹配也可以简化为:
<xsl:template match="//DIO[not(@NOPRINT = '1')]">这是因为只有当NOPRINT首先存在(并且它等于1)时,@NOPRINT = 1才会计算为true。如果没有这样的属性,则表达式将为false,这正是您想要的。
https://stackoverflow.com/questions/33563499
复制相似问题