XPath选择器在PDF转换期间不起作用

时间:2013-09-24 18:28:30

标签: xslt xpath dita

我有一个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”?

2 个答案:

答案 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代码中对其进行硬编码不会有任何损害。