我有一个XML文档,其根节点为sv:node
,我正在尝试定义与此根节点匹配的模板。
当我的根节点没有前缀时,它通常可以工作,但在这种情况下会引发异常。
<xsl:template name="/sv:node" />
我正在使用JAVA和Apache XALAN XSLT processor,这会引发RuntimeException
Caused by: java.lang.RuntimeException: Le préfixe doit se convertir en espace de noms : /sv
at org.apache.xml.utils.QName.<init>(QName.java:450)
at org.apache.xalan.processor.XSLTAttributeDef.processQNAME(XSLTAttributeDef.java:937)
我为RuntimeException
的本地化消息道歉,基本上它抱怨前缀没有映射到命名空间。
所以问题是,我该如何匹配这个根节点?
修改:这是我的stylesheet
标记
这是我的样式表标签:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:zip="http://apache.org/cocoon/zip-archive/1.0"
xmlns:sv="http://www.jcp.org/jcr/sv/1.0">
答案 0 :(得分:1)
我怀疑你的意思是
<xsl:template match="/sv:node" />
(match
而不是name
)。使用<xsl:template name="...">
声明了一个命名模板,可以由<xsl:call-template>
调用,而不是<xsl:apply-templates>
的匹配模板,以及命名模板必须是QName。例外情况是告诉您它正在尝试将三个字符“forward-slash,s,v”视为QName的前缀部分,并发现此前缀未映射到URI。
答案 1 :(得分:0)
这是一个愚蠢的错误,我正在使用
<xsl:template name="/sv:node" />
而不是
<xsl:template match="/sv:node" />