Xslt 使用XSL获取XML文档中属性的值

Xslt 使用XSL获取XML文档中属性的值,xslt,xpath,docbook-5,Xslt,Xpath,Docbook 5,我正在尝试获取iWantToGetThis.jpg的值,并将其放入。/图标中/ 图像被添加到输出中,但是src属性被设置为“./icons/”,因此我假设它在XML中找不到fileref属性。对我来说,这看起来非常有效,所以我不确定我遗漏了什么。我不确定您如何能够获取任何信息,因为这看起来不像是一个有效的XSLT文档(我希望出现错误“关键字xsl:stylesheet可能不包含img”) 然而,您可能只是在显示代码片段。如果是这种情况,您的问题可能是您只为article元素指定了名称空间,而实

我正在尝试获取
iWantToGetThis.jpg的值,并将其放入
。/图标中/

图像被添加到输出中,但是src属性被设置为“./icons/”,因此我假设它在XML中找不到
fileref
属性。对我来说,这看起来非常有效,所以我不确定我遗漏了什么。

我不确定您如何能够获取任何信息,因为这看起来不像是一个有效的XSLT文档(我希望出现错误“关键字xsl:stylesheet可能不包含img”)

然而,您可能只是在显示代码片段。如果是这种情况,您的问题可能是您只为article元素指定了名称空间,而实际上需要为xpath中的所有元素指定名称空间。试试这个

<article>
    <info>
        <mediaobject>
            <imageobject>
                <imagedata fileref='iWantToGetThis.jpg'>

另一个可能的问题可能是因为您正在使用“祖先或自我”xpath轴来查找属性。只有当前上下文已经在文章元素或其子元素上时,这才有效

作为旁注,您可以通过在此处使用属性值模板来简化代码

<xsl:template name="user.header.content">
    <xsl:stylesheet xmlns:d='http://docbook.org/ns/docbook'>
        <img><xsl:attribute name="src">../icons/<xsl:value-of select='ancestor-or-self::d:article/info/mediaobject/imageobject/imagedata/@fileref' /></xsl:attribute></img>
    </xsl:stylesheet>
</xsl:template>


原因很简单,xpath表达式中的子元素缺少名称空间。如果完整表单只包含一个
元素,则允许使用这种样式表形式。样式表只包含该模板元素的内容。我正在使用的XSL更加充实。在发布这篇文章之后,我意识到这并不是一个好的XSL示例。。。
<xsl:value-of 
   select="ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref"/>
<img src="../icons/{ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref}" />