我有这个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。
为什么?
答案 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
- 只要命名空间匹配它就会找到正确的东西。