【问题标题】:Match document root node with a prefix将文档根节点与前缀匹配
【发布时间】:2012-12-28 16:28:00
【问题描述】:

我有一个根节点为 sv:node 的 XML 文档,我正在尝试定义一个与该根节点匹配的模板。
当我的根节点没有前缀时,它通常可以工作,但在这种情况下会引发异常。

<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">

【问题讨论】:

    标签: java xml xslt xalan


    【解决方案1】:

    我怀疑你的意思是

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

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

    【讨论】:

      【解决方案2】:

      这是一个愚蠢的错误,我正在使用

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

      而不是

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

      【讨论】:

        猜你喜欢
        • 2018-08-20
        • 2017-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多