我正在编写一个样式表,在转换XML之前,它最终(通过代码)与我控制和范围之外的各种其他样式表相结合。
我在模板中编写xsl:element,但我不知道我不控制的其他模板是否已经定义了一个附加到祖先元素的命名空间(即xmlns="blah")。
在这种情况下,如果我不在xsl:element上指定名称空间,我将收到一个xmlns=",将此元素放回无名称空间中。然而,我不希望发生这种情况,但我不能专门将名称空间设置为文字值,也不能设置样式表默认名称空间。
我看到过很多帖子试图删除xmlns=",但我觉得没有任何解决方案适合这种情况。大多数与在所有节点上设置名称空间、设置默认值或排除#default的结果前缀有关。
我使用的是XSLT1.0,我很乐意在祖先中搜索最近的元素,该元素定义了一个名称空间,而不是没有名称空间,并将其用作元素名称空间。不幸的是,我没能做到这一点,因此我们非常感谢您的帮助。谢谢,如果我错过了现有的解决方案,我深表歉意。
有趣的问题。您的要求是创建一个元素,该元素的命名空间与结果树中其父元素的命名空间相同,而您不静态地知道这一点。该解决方案与您想要创建一个本地名称与结果树中其父元素的本地名称相同的元素完全相同:正如您所期望的,元素名称的URI和本地部分在XSLT中具有相等的权重。(对于那些希望将名称空间视为装饰的人,这种语言几乎没有同情心。)在这两种情况下,解决方案都是将未知信息作为参数传递给创建元素的模板。