0

我有一个存储图像路径的 DITA 图书地图:

<bookmap>
    <bookmeta>
        <data id="productLogo">
            <image href="images/_notrans/frontcover/productLogo.svg" />
        </data>
        <data id="productPhoto" >
            <image href="images/_notrans/frontcover/productPhoto.jpg" />
        </data>
    </bookmeta>
</bookmap>

然后我尝试通过 data[@id] 获取 href 值:

<xsl:variable name="productLogo"><xsl:value-of select="//data[@id='productLogo']/image/@href" /></xsl:variable>
<xsl:variable name="productPhoto"><xsl:value-of select="//data[@id='productPhoto']/image/@href" /></xsl:variable> 

(当我在 Oxygen 中测试我的 bookmap 时,这些 XPath 表达式与 href 匹配。)

在转换期间我输出:

<xsl:message>productPhoto: <xsl:value-of select="$productPhoto"/></xsl:message>

value-of 始终为空。

但是,如果我用数字替换 id 属性,一切都会按预期工作:

<xsl:variable name="productLogo"><xsl:value-of select="//data[1]/image/@href" /></xsl:variable>
<xsl:variable name="productPhoto"><xsl:value-of select="//data[2]/image/@href" /></xsl:variable> 

我做错了什么阻止使用@id="whatever"?

4

2 回答 2

1

XSLT 不直接应用于 Bookmap 内容,它应用于一个 XML 文档,该文档包含扩展了所有主题引用的 bookmap,并对其应用了一些预处理。如果将“clean.temp”参数设置为“no”,您将在临时文件夹中找到一个名为“mapName_MERGED.xml”的文件,这是应用 XSLT 的 XML 文档,您将在它,所有 ID 都已更改为在整个 XML 文档的上下文中是唯一的。

通常使用数据元素时,您应该为它们设置 @name 属性,例如:

<data name="productLogo">

并在 XSLT 代码中匹配该名称。在 DITA 1.2 规范中也有使用“数据”的示例:

http://docs.oasis-open.org/dita/v1.2/os/spec/langref/data.html#data

于 2013-09-25T05:48:49.713 回答
0

根据您的需要,另一种选择是为产品照片制定命名约定并使用该元素来构建 URI。由于产品徽标不应针对产品系列而更改,因此在 XSLT 代码中对其进行硬编码不会有什么坏处。

于 2013-09-25T13:15:02.283 回答