XSL 元素动态继承命名空间

ljb*_*b26 5 java xslt xpath namespaces xslt-1.0

我正在编写一个样式表,在转换 XML 之前,该样式表最终会(通过代码)与我的控制和范围之外的各种其他样式表组合在一起。

我正在模板中编写“xsl:element”,但是我不知道我不控制的其他模板是否已经定义了附加到祖先元素的命名空间(即 xmlns="blah")。

在这种情况下,如果我没有在 xsl:element 上指定命名空间,我将收到 xmlns="",将此元素放回无命名空间中。但是,我不希望发生这种情况,但我无法专门将命名空间设置为文字值,也无法设置样式表默认命名空间。

我看过很多帖子试图删除 xmlns="",但我认为没有任何解决方案适合这种情况。大多数与在所有节点上设置命名空间、设置默认值或排除 #default 的结果前缀有关。

我正在使用 XSLT 1.0,并且我很高兴在祖先中搜索具有定义的命名空间而不是无命名空间的最接近的元素,并将其用作元素命名空间。不幸的是我没能做到这一点,因此感谢任何帮助。谢谢,如果我错过了现有的解决方案,我深表歉意。

Mic*_*Kay 3

有趣的问题。您的要求是创建一个元素,其命名空间与其在结果树中的父元素的命名空间相同,而您静态地不知道该元素。解决方案与您想要创建一个其本地名称与其在结果树中的父元素相同的元素完全相同:正如您所期望的,元素名称的 URI 和本地部分在 XSLT 中具有相同的权重。(该语言对那些希望将名称空间仅视为装饰的人没有什么同情心。)在这两种情况下,解决方案都是将未知信息作为参数传递给创建元素的模板。