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