使用xlink时未定义的名称空间前缀错误

时间:2014-08-19 09:40:37

标签: image xslt

我有这个xml:

<figure>
    <objetmedia>
        <image typeimage="figure" xlink:actuate="onLoad" xlink:href="picture-02.jpg" xlink:show="embed" xlink:type="simple"/>
    </objetmedia>
</figure>

我有这个xsl脚本:

<xsl:template match="figure">
    <figure>
        <xsl:apply-templates select="objetmedia" mode="image"/>
    </figure>
</xsl:template>

<xsl:template match="objetmedia" mode="image">
    <img src='{image/@xlink:href}' />
</xsl:template>

但我有这个错误:

警告:XSLTProcessor :: transformToXml():未定义的名称空间前缀 警告:XSLTProcessor :: transformToXml():xmlXPathCompiledEval:评估失败 警告:XSLTProcessor :: transformToXml():运行时错误:文件script.xsl第154行元素img 警告:XSLTProcessor :: transformToXml():内部错误:无法评估属性&#39; src&#39;的AVT。

为什么?

1 个答案:

答案 0 :(得分:3)

您需要在样式表中声明xlink:名称空间前缀,并将其绑定到与原始文档使用的名称相同的名称空间uri。您没有显示包含命名空间声明的输入文档部分,但如果它是标准XLink命名空间,那么您需要添加

xmlns:xlink="http://www.w3.org/1999/xlink"

到适当的地方,通常是您的xsl:stylesheet标记。

重点是XPath表达式和匹配模式使用样式表的前缀绑定,而不是输入xml文档的前缀绑定。匹配的重要性是命名空间uri和本地名称。您的样式表同样可以声明xmlns:x="http://www.w3.org/1999/xlink",然后查找@x:href - 只要命名空间匹配它就会找到正确的东西。