【问题标题】:XSL:FO How to get the img src from xml and then use it as src for fo:external-graphicXSL:FO 如何从 xml 获取 img src,然后将其用作 fo:external-graphic 的 src
【发布时间】:2016-12-17 13:27:39
【问题描述】:

问题:如何从img元素中获取src属性,然后将src的值复制到一个变量中,然后设置变量 作为srcfo:external-graphic 元素?

假设我有一个带有如下图像的 XML 文档:

<diffreport>
<css />
<diff>
    <p>
        <span class="diff-html-removed" id="removed-diff-0" previous="first-diff"
            changeId="removed-diff-0" next="added-diff-0">
            <img alt="" id="Rxed6OQAKXfCYA"
                src="D:\udu\img1.jpg" changeType="diff-removed-image" />
        </span>         
    </p>
</diff>

注意:假设每个img 元素的src 路径都是动态的。

我确认下面的这段代码可以正常工作,但它不好,因为它是硬编码的。我真的很想知道如何将 "url('D:\udu\img1.jpg')" 替换为 variable 所以代码是动态的。

<!-- Image -->
<xsl:template match="img">
    <fo:external-graphic
        src="url('D:\udu\img1.jpg')"></fo:external-graphic>
</xsl:template>

有没有办法做到这一点?谢谢你。 :)

【问题讨论】:

    标签: xml xslt xslt-1.0 xsl-fo


    【解决方案1】:

    你可以试试

    <xsl:template match="img">
        <fo:external-graphic
            src="{concat('file:///', translate(@src, '\', '/'))}" />
    </xsl:template>
    

    将获得D:\udu\img1.jpg 并将其称为file:///D:/udu/img1.jpg

    【讨论】:

    • 需要 {}concat(...) 周围才能将其作为表达式进行评估。
    【解决方案2】:

    使用一个属性值模板,该模板将被评估以从您的 XML 中获取 @src 的值。见https://www.w3.org/TR/xslt#attribute-value-templates

    <!-- Image -->
    <xsl:template match="img">
      <fo:external-graphic src="url('{@src}')" />
    </xsl:template>
    

    【讨论】:

    • 有什么方法可以在不定义变量的情况下从 xml 中放入源代码
    • 对不起,我不明白你的评论。
    猜你喜欢
    • 2012-04-22
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多