作者 |
主题: 表达式 |
|
八神
[过客] |
发表于: 8/22/2005 1:13:13 AM
p287;
表达式[$A=$B=$C]是合法的,然而这并不是很有用,有时可能会出乎我们所期望的结果. 它等价于[($A=$B)=$C],即测试$C经转换为布尔值以后,与$A和$B进行比较的结果再进行比较. 例如:[2=1=0]为真,这是因为,[2=1]为假,0转换为bool值为假,因此...
比较节点集
节点节$N与字符串'mary'进行比较时,如果$N中有一节点n满足:string-value(n)='mary',则我们说
[$N='mary'];同理,如果$N中有一节点n满足:string-value(n)!='mary',则我们说[$N!='mary'].如果$N中有两
个节点,其字符串分别为mary和john,则[$N='mary']、[$N!='mary']将同时成立,如果$N为空节点,结果将都为假
,$N=$N也为假.
注意:我们所说的节点集中的节点,考虑的仅仅是节点集中的成员,不包括子节点.
属性与字符串的比较
例如,要比较{xsl:if test="@name != 'james'"}与{xsl:if test="not(@name='james')"}是否等价,可以看出,
如果name属性不存在,第一个表达式结果为假,而第二个表达式结果为真.
测试当前节点的父节点是否是根节点的较好方法是使用{parent::*[not(..)]},它对于那些有父节点但没有祖父
节点来说为真.还可以用{generate-id(..)=generate-id(/)}来比较节点集的任一个单独的成员,另外,当且仅当
父节点与根节点是同一节点时,{count(..|/) and ..}为真,其中 and 条件是必要的,因为如果去掉它,对于没有
父了点的节点(即根节点),上述表达式同样成立.
|
性别: 男 |
|
|
作者 |
主题: 何时集合不是一个集合? |
|
八神
[过客] |
发表于: 8/15/2005 4:28:53 AM
样式表 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:output method="text" />
<xsl:variable name="a" select="/Root/Numbers[1]/Integer/@value"/> <xsl:variable name="b" select="/Root/Numbers[1]/Integer/@value[. > 2]"/> <xsl:variable name="c" select="/Root/Numbers[1]/Integer/@value[. = 3]"/>
<xsl:template match="/"> SET A: { <xsl:for-each select="$a"> <xsl:value-of select="." />, </xsl:for-each> } SET B: { <xsl:for-each select="$b"> <xsl:value-of select="." />, </xsl:for-each> } SET C: { <xsl:for-each select="$c"> <xsl:value-of select="." />, </xsl:for-each> }
a UNION b: { <xsl:for-each select="$a | $b"> <xsl:value-of select="." />, </xsl:for-each> } b UNION c: { <xsl:for-each select="$b | $c"> <xsl:value-of select="." />, </xsl:for-each> } a INTERSECTION b: { <xsl:for-each select="$a[count(.|$b) = count($b)]"> <xsl:value-of select="." />, </xsl:for-each> } a INTERSECTION c: { <xsl:for-each select="$a[count(.|$c) = count($c)]"> <xsl:value-of select="." />, </xsl:for-each> } a DIFFERENCE b: { <xsl:for-each select="$a[count(.|$b) != count($b)] | $b[count(.|$a) != count($a)]"> <xsl:value-of select="." />, </xsl:for-each> } a DIFFERENCE c: { <xsl:for-each select="$a[count(.|$c) != count($c)] | $c[count(.|$a) != count($a)]"> <xsl:value-of select="." />, </xsl:for-each> } a SUBSET OF b: { <xsl:value-of select="count($b | $a) = count($b)"/> } b SUBSET OF a: { <xsl:value-of select="count($b | $a) = count($a)"/> } </xsl:template>
</xsl:stylesheet> 输出 SET A: { 4, 2, 3, } SET B: { 4, 3, } SET C: { 3, }
a UNION b: { 4, 2, 3, } b UNION c: { 4, 3, } a INTERSECTION b: { 4, 3, } a INTERSECTION c: { 3, } a DIFFERENCE b: { 2, } a DIFFERENCE c: { 4, 2, } a SUBSET OF b: { false } b SUBSET OF a: { true }
此留言被版主修改于:8/15/2005 4:33:21 AM |
|
性别: 男 |
|
|
|