我有一个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的本地化消息表示歉意,基本上是抱怨前缀with没有映射到命名空间。

所以问题是,如何匹配此根节点?

编辑:这是我的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">

最佳答案

我怀疑你是真的意思

<xsl:template match="/sv:node" />


(使用match而不是name)。使用<xsl:template name="...">声明可以由<xsl:call-template>调用的命名模板,而不是<xsl:apply-templates>的匹配模板,并且命名模板的名称必须是QName。例外是告诉您它正在尝试将三个字符“正斜杠,s,v”视为QName的前缀部分,并发现此前缀未映射到URI。

07-27 13:55