XSLT多扁平XML转树形XML:LEVEL6对象关联SIMPLEENTITY报错修复
修复XSLT中XTDE0410错误的方案
错误原因
XTDE0410错误的核心是违反了XSLT输出规则:元素的所有属性节点必须在子元素节点之前生成。你的代码里,apply-templates先处理了子元素节点(key('child', @OBJECTID, $doc2)/key('subobject', @OBJECTID, $doc3)的查询结果),之后才处理属性@*,导致属性被尝试添加到已有子元素的元素上,触发报错。
修复方案
方案1:拆分apply-templates为两步(推荐)
把原代码的一行拆成独立两步,先处理属性,再处理子元素节点,严格遵循输出顺序规则:
<xsl:apply-templates select="@*"/> <xsl:apply-templates select="key('child', @OBJECTID, $doc2)/key('subobject', @OBJECTID, $doc3)"/>
方案2:调整select中的节点顺序
如果要保持代码简洁,直接在select参数中将属性节点放在最前面,确保处理顺序正确:
<xsl:apply-templates select="@*, key('child', @OBJECTID, $doc2)/key('subobject', @OBJECTID, $doc3)"/>
额外检查
排查其他处理元素的模板,确保所有模板都遵循“先输出属性,再输出子元素”的规则,避免同类错误重复出现。
内容的提问来源于stack exchange,提问作者Sergey Zakharov
相关产品推荐
相关产品推荐

