是否应在XSLT中声明XML中定义的命名空间以使转换成功?

时间:2013-06-17 20:21:50

标签: xml xslt

我有一个XSL,它匹配输入XML中的所有属性,并将它们原样复制到输出XML中。我使用name()函数来获取匹配属性的名称。 当XSL遇到一个属性,其名称空间未在XSL本身中定义时,我得到一个"未知的模式前缀"错误。但是当我在XSL中定义这些命名空间时,它工作正常。

为什么命名空间的定义是必要的?

1 个答案:

答案 0 :(得分:1)

如果您希望我们告诉您代码有什么问题,那么显示您的代码会很有帮助。否则我们只需要猜测。我的猜测是你正在做的事情:

<xsl:attribute name="{name()}"/>

如果name()返回类似“ xyz :banana ”的内容 xyz ,则会失败不是样式表中声明的前缀。更好的方法是:

<xsl:attribute name="{local-name()}" namespace="{namespace-uri()}"/>

但如果我完全错误地猜到了这个问题,那么 - 责怪自己。