XSLT条件判断报错求助:需优先获取QUALF=012的BELNR值
解决XSLT上下文缺失错误并实现指定逻辑
报错原因
你遇到的The context item for axis step xsl:document/element() is absent错误,本质是因为你的XSLT代码缺少完整结构(无模板匹配、无根样式声明),导致XPath表达式找不到正确的上下文节点,无法定位源XML中的元素。
修正方案
需要补全XSLT的完整结构,同时修正XPath细节(给字符串值加引号),确保逻辑正确执行。
完整修正后的XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配源XML的根节点DATA --> <xsl:template match="/DATA"> <DATA> <Target> <BELNR> <xsl:choose> <!-- 检查QUALF为"012"的E1EDK02节点下的BELNR是否存在且非空 --> <xsl:when test="E1EDK02[QUALF='012']/BELNR != ''"> <xsl:value-of select="E1EDK02[QUALF='012']/BELNR"/> </xsl:when> <!-- 否则使用QUALF为"002"的BELNR值 --> <xsl:otherwise> <xsl:value-of select="E1EDK02[QUALF='002']/BELNR"/> </xsl:otherwise> </xsl:choose> </BELNR> </Target> </DATA> </xsl:template> </xsl:stylesheet>
关键修复点
- 补全XSLT基础结构:添加
<xsl:stylesheet>根元素和匹配源XML根节点/DATA的模板,确保XPath有正确的上下文 - 修正XPath字符串匹配:给QUALF的值加上单引号(
'012'、'002'),避免将字符串当成数字处理,匹配更准确 - 增强空值判断:将判断条件改为
E1EDK02[QUALF='012']/BELNR != '',同时覆盖“012节点存在但BELNR为空”和“没有012节点”两种情况
测试验证
场景1:源XML包含QUALF=012且BELNR非空(你提供的示例)
转换后输出与预期一致:
<?xml version="1.0" encoding="UTF-8"?> <DATA> <Target> <BELNR>0090000020</BELNR> </Target> </DATA>
场景2:QUALF=012的BELNR为空(或无012节点)
比如源XML修改为:
<?xml version="1.0" encoding="UTF-8"?> <DATA> <E1EDK02> <QUALF>002</QUALF> <BELNR>0030000084</BELNR> </E1EDK02> <E1EDK02> <QUALF>012</QUALF> <BELNR></BELNR> </E1EDK02> </DATA>
转换后输出:
<?xml version="1.0" encoding="UTF-8"?> <DATA> <Target> <BELNR>0030000084</BELNR> </Target> </DATA>
内容的提问来源于stack exchange,提问作者AnirD
相关产品推荐
相关产品推荐

