将文档根节点与前缀匹配

时间:2013-01-14 17:02:45

标签: java xml xslt xalan

我有一个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">

2 个答案:

答案 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" />