如何使用取决于孩子孩子的价值的条件制作for-each
元素?
项目的XML示例:
<z:item>
<z:publications>
<z:publication>
<z:mediaKey>a</z:mediaKey>
<z:publicationStatus>published</z:publicationStatus>
</z:publication>
<z:publication>
<z:mediaKey>b</z:mediaKey>
<z:publicationStatus>ready</z:publicationStatus>
</z:publication>
<z:publication>
<z:mediaKey>c</z:mediaKey>
<z:publicationStatus>ready</z:publicationStatus>
</z:publication>
</z:publications>
</z:item>
现在,我想对for-each
和mediaKey!=a
的所有项目进行publicationStatus=published
。
我试过了:
<xsl:for-each select="//z:item[z:publication/@status = 'published' and z:publication/@mediaKey != 'zgonline']">
但这是错误的,因为它还包括上面的项目a/published
而其他项目只处于就绪状态。
当我这样做时:
<xsl:for-each select="//z:item/z:publication[@status = 'published' and @mediaKey != 'zgonline']">
然后它选择正确的publication
个节点,但结果节点集将包含上述item
的两倍,因为它满足选择标准的两倍....
我其实想做这样的事情:
<xsl:for-each select="//z:item[z:publication[@status = 'published' and @mediaKey != 'zgonline']]">
我该怎么做?
答案 0 :(得分:0)
我认为
[你]希望为拥有
z:item
和mediaKey!='a'
的所有publicationStatus='published'
制作一个for-each。
如果这个(你的)问题是正确的,那么正确答案将是
<xsl:for-each select="//z:item[z:publications/z:publication/z:publicationStatus = 'published' and z:publications/z:publication/z:mediaKey != 'a']">
<xsl:text>MATCHED</xsl:text>
</xsl:for-each>
将循环遍历具有给定值的这两个子节点的所有z:item
。
答案 1 :(得分:0)
我刚刚发现这个解决方案工作得很好,你可以有嵌套条件:
<xsl:for-each select="//z:item[z:publication[@status = 'published' and @mediaKey != 'zgonline']]">
但是,@ zx485的建议解决方案也有效:
<xsl:for-each select="//z:item[z:publications/z:publication/z:publicationStatus = 'published' and z:publications/z:publication/z:mediaKey != 'a']">