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