我有一个DITA bookmap,我在那里存储图像路径:
<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>
然后我尝试通过数据[@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 =“what”?
答案 0 :(得分:1)
XSLT不是直接应用于Bookmap内容,而是应用于XML文档,该文档包含书签图,其中包含所有主题参考,并且应用了一些预处理。 如果将“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
答案 1 :(得分:0)
根据您的需要,另一个选择是为产品照片开发命名约定并使用该元素构建URI。由于产品系列不应更改产品徽标,因此在XSLT代码中对其进行硬编码不会有任何损害。