XML中定义的名称空间是否也应该在XSLT中声明以使转换成功?
我有一个XSL,它匹配输入XML中的所有属性,并将它们原样复制到输出XML中。我使用XML中定义的名称空间是否也应该在XSLT中声明以使转换成功?,xml,xslt,Xml,Xslt,我有一个XSL,它匹配输入XML中的所有属性,并将它们原样复制到输出XML中。我使用name()函数获取匹配属性的名称。 当XSL遇到一个名称空间未在XSL本身中定义的属性时,我会得到一个“未知模式前缀”错误。但是,当我在XSL中定义这些名称空间时,它工作得很好 为什么有必要定义名称空间?如果您想让我们告诉您的代码有什么问题,那么显示您的代码会很有帮助。否则我们只能猜测了。我猜你正在做的事情是: <xsl:attribute name="{name()}"/> 但是,如果我完全猜错
name()
函数获取匹配属性的名称。
当XSL遇到一个名称空间未在XSL本身中定义的属性时,我会得到一个“未知模式前缀”错误。但是,当我在XSL中定义这些名称空间时,它工作得很好
为什么有必要定义名称空间?如果您想让我们告诉您的代码有什么问题,那么显示您的代码会很有帮助。否则我们只能猜测了。我猜你正在做的事情是:
<xsl:attribute name="{name()}"/>
但是,如果我完全猜错了问题所在,那就责怪你自己。如果你只是复制属性而不做任何更改,为什么要使用
name()
?你想去掉前缀吗?如果是这样,请尝试local-name()
。我不会去掉前缀。我只是复制名称的原样,然后对属性的值进行一些有条件的复制。如果我使用local-name(),那么我将在输出XML中丢失我不想要的名称空间。
<xsl:attribute name="{local-name()}" namespace="{namespace-uri()}"/>