【发布时间】:2021-01-26 13:36:28
【问题描述】:
我有这个源 xml:
<cip>
<data>
<typo>
<articles>
<article id="BM017106--">
<lang>Lang Text(de-AT) -- BM017106--:6</lang>
</article>
<article id="XC01010101">
<lang>H07V-U (Ye) 1,5mm² schwarz, PVC Aderleitung eindrähtig</lang>
</article>
</articles>
</typo>
</data>
</cip>
并遵循 xslt:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:message select="cip/data/typo/articles/article[1]/@id"/>
</xsl:template>
</xsl:stylesheet>
当我使用 Saxon saxon9ee.jar 对其进行转换时,一切正常。 当我尝试使用 saxon-ee-10.3.jar 对其进行转换时,我得到:错误 XTDE0420,无法创建其父节点是文档节点的属性节点 (id)。 有人知道出了什么问题吗?
【问题讨论】:
-
当一切都“很好”时,您使用 Saxon 9 究竟会得到什么结果?只是带有属性名称和/或值的消息?也许对于 Saxon 10,作为一种解决方法,输出例如
cip/data/typo/articles/article[1]/@id!(local-name() || '=' || .). -
有一个非常古老的错误报告 saxonica.plan.io/issues/950 说 Saxon 9 试图通过不引发该错误来实现用户友好,但不确定 10.3 中发生了什么变化。
-
使用 Saxon 9 我得到:
-
测试用例github.com/w3c/xslt30-test/blob/master/tests/insn/message/…似乎检查了这一点,不知道为什么在Saxon发布测试中没有出现问题,似乎10.0具有通过输出属性节点作为处理指令而恢复的行为,而10.1 是第一个提高 XTDE0420 的 Saxon 版本。