XSLT过滤Is_Evergreen非0的Report_Entry失败求助
XSLT过滤wd:Report_Entry节点的正确实现
错误原因分析
你用的../wd:Job_Requisition_group/wd:Is_Evergreen = '0'路径逻辑错误:
- 当你在
<xsl:for-each select="wd:Report_Entry">内部时,当前节点是<wd:Report_Entry>,../指向的是当前节点的父节点,而非<wd:Report_Entry>自身的子节点。如果<wd:Job_Requisition_group>是<wd:Report_Entry>的子节点,这个路径会跳出到父节点去查找,自然匹配不到目标节点,导致条件永远不成立,所以没有输出。
正确实现方法
方法1:直接在for-each的select中过滤(推荐)
把过滤条件整合到for-each的节点选择逻辑里,只遍历符合条件的<wd:Report_Entry>,效率更高:
<xsl:for-each select="wd:Report_Entry[wd:Job_Requisition_group/wd:Is_Evergreen = '0']"> <!-- 你的原有输出逻辑 --> </xsl:for-each>
方法2:在for-each内部用xsl:if判断
如果一定要保留原来的for-each结构,修正路径即可(去掉../,直接从当前<wd:Report_Entry>节点下查找子节点):
<xsl:for-each select="wd:Report_Entry"> <xsl:if test="wd:Job_Requisition_group/wd:Is_Evergreen = '0'"> <!-- 你的原有输出逻辑 --> </xsl:if> </xsl:for-each>
额外注意点
确保你的XSLT代码中已经正确声明了wd命名空间,比如在<xsl:stylesheet>标签里添加类似这样的声明:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="http://your-namespace-uri-here">
命名空间URI必须和XML文件中wd前缀对应的URI完全一致,否则节点会匹配失败。
内容的提问来源于stack exchange,提问作者Velsus
相关产品推荐
相关产品推荐

