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