Saxon 如何摆脱xmlns:xsl=";http://www.w3.org/1999/XSL/Transform" 元素上的命名空间

Saxon 如何摆脱xmlns:xsl=";http://www.w3.org/1999/XSL/Transform" 元素上的命名空间,saxon,Saxon,我正在处理从其他人那里继承的XSLT代码。它使用作为输出方法。HTML元素被创建为文本(例如等)。问题是我无法摆脱xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“元素上的命名空间 如果我用xsl:element生成html元素,名称空间就会消失,正如预期的那样,但是所有的子元素都有它,我只是不能将所有的文本都更改为xsl:element,这样做太多了,名称空间实际上并没有造成任何伤害。我只是想知道是否有办法在保留文字的同时删除它 我已经尝试了我想到

我正在处理从其他人那里继承的XSLT代码。它使用
作为输出方法。HTML元素被创建为文本(例如
等)。问题是我无法摆脱
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“
元素上的
命名空间

如果我用
xsl:element
生成html元素,名称空间就会消失,正如预期的那样,但是所有的子元素都有它,我只是不能将所有的文本都更改为
xsl:element
,这样做太多了,名称空间实际上并没有造成任何伤害。我只是想知道是否有办法在保留文字的同时删除它

我已经尝试了我想到的一切,但没有任何效果。为什么这个名称空间在那里?据我所知,它不应该被复制,并且不能用exclude结果前缀将其删除


我用Saxon9PE来回答我自己的问题

这是由于命名空间别名造成的。以下代码位于其中一个文件中:

<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:x="http://www.w3.org/1999/XSL/TransformAlias"
    >
    <xsl:namespace-alias stylesheet-prefix="x" result-prefix="xsl"/>

代码可能是从第三方库中复制的,别名保留了下来(它实际上是在一个元素中使用的,我一点也不知道为什么)

无论如何,一旦别名被删除,名称空间就会从生成的文件中消失。有趣的是,要修复使用它的模板是不够的。只要名称空间别名存在,就会生成名称空间


我从来没有想过要搜索名称空间别名,我在代码中搜索名称空间的所有匹配项以查找任何奇怪的内容时幸运地找到了它:)

对不起,所有标记都消失了。它被用作输出方法。HTML元素被创建为文本,如。问题是我无法删除元素上的xmlns:xsl=”“名称空间。经过编辑以将元素标记为代码,因此它们没有被剥离。在我们告诉您如何删除此名称空间声明之前,我们需要知道它是如何/为什么进入输出的,为此,我们需要查看您的代码。请提供一个最小的可复制示例。我认为最有可能的解释是,它出现在使用xsl:copy或xsl:copy of复制的源元素上,但您看不到的调试代码是一个纸杯游戏,因此猜测可能完全错误。谢谢您的提示,Michael(顺便说一句,这是一本很棒的书,也是一个很棒的产品)。因为有大约300个xsl文件,所以很难创建一个最小的可复制示例。但是,我搜索了所有出现的名称空间,它只出现在xsl:stylesheet中。我确实注意到了一些潜在的奇怪现象。少数文件还包含以下命名空间:xmlns:x=”“。就我所见,它没有在代码中使用,也不知道它为什么会出现。这可能是罪魁祸首吗?我无法想象为什么,但这是我在搜索时注意到的唯一奇怪的事情。事实上,我认为许多XSLT专家会发现,要在大型样式表中找到这个bug是一个棘手的问题。XSLT包在3.0中引入的一个原因是使人们能够编写更多的模块化代码,而不会受到这样的全局影响。