Xslt 按ID进行的每个排除的XSL
我有一个XSL问题。 使用以下代码,我排除了Box1Xslt 按ID进行的每个排除的XSL,xslt,Xslt,我有一个XSL问题。 使用以下代码,我排除了Box1 <xsl:for-each select="//box[@id!='box1']"> 但我还想排除第7框。 这有可能吗?我该怎么做呢?您可以将这些谓词放在一起: <xsl:for-each select="//box[@id!='box1'][@id!='box7']"> 使用: //box[not(@id='box1') and not(@id='box2')] 如果要排除多个ID,请使用(在本例中,我排
<xsl:for-each select="//box[@id!='box1']">
但我还想排除第7框。
这有可能吗?我该怎么做呢?您可以将这些谓词放在一起:
<xsl:for-each select="//box[@id!='box1'][@id!='box7']">
使用:
//box[not(@id='box1') and not(@id='box2')]
如果要排除多个ID,请使用(在本例中,我排除了“box1”-“box4”):
在本例中,相同的属性,我将使用
和运算符。@Alejandro:我倾向于使用多个谓词,这看起来更清楚。如果有任何关于这方面的编码标准(以及一般的xsl),那就太好了:)好问题,+1。有关两个单行XPath解决方案,请参见我的答案,第二个显示如何轻松排除多个节点。:)@Dimitre:在这种情况下,如果选择的@id
属性不能超过一个,则属性将=代码>运算符就足够了。当然,在其他情况下可能不是这样。@Alejandro:是的,我知道。是的,我不建议使用=代码>即使在这种情况下也不要使用=代码>(可能只有在特殊情况下,它可能会给你一些表达上的优势),因此永远不会有令人讨厌的问题。@Dimitre:你能进一步解释一下为什么你从不使用=
?@Alejandro:嗯,直观的表达式(@id!=('box1','box7')肯定是错误的-如果@id是ne-box1或ne-box7,那么它总是正确的。@lwburk:如果你有一个变量$nums
包含一个节点集:123
,并且你比较'1'!=$nums
,结果为true()
。比较'1'=$nums
的结果也是true()。这是人们需要避免的反常现象。在调试代码时发现这一事实是非常尴尬的。
//box[not(contains('|box1|box2|box3|box4|', concat('|', @id, '|'))]