我有一个XSL,它匹配输入XML中的所有属性,并将它们原样复制到输出XML中。我使用name()
函数来获取匹配属性的名称。
当XSL遇到一个属性,其名称空间未在XSL本身中定义时,我得到一个"未知的模式前缀"错误。但是当我在XSL中定义这些命名空间时,它工作正常。
为什么命名空间的定义是必要的?
答案 0 :(得分:1)
如果您希望我们告诉您代码有什么问题,那么显示您的代码会很有帮助。否则我们只需要猜测。我的猜测是你正在做的事情:
<xsl:attribute name="{name()}"/>
如果name()
返回类似“ xyz :banana ”的内容 xyz ,则会失败不是样式表中声明的前缀。更好的方法是:
<xsl:attribute name="{local-name()}" namespace="{namespace-uri()}"/>
但如果我完全错误地猜到了这个问题,那么 - 责怪自己。