如何在其他XSL模板中使用处理指令值?

时间:2019-06-19 23:35:01

标签: xslt dita dita-ot

我无法在已经用于在输出文件的标题中添加主题详细信息的另一个模板中使用处理指令属性值。

<task xml:lang="en-us" id="_01FDEB11">
    <?ASTDOCREVINFO __docVerName="1.6" __docVerDesc="Description goes here" __docVerUser="Leroy" __docVerDate="Sep 25, 2017 10:44:44 AM"?>

我已经创建了一个模板来从处理指令中提取值,但是变量不会将值保留在其他模板中。

<xsl:template match="processing-instruction('ASTDOCREVINFO')">

Version: <xsl:value-of select="substring-before(substring-after(., '__docVerName=&quot;'), '&quot;')"/> 
Date: <xsl:value-of select="substring-before(substring-after(., '__docVerDate=&quot;'), '&quot;')"/>

<xsl:variable name="astVersion" select="substring-before(substring-after(., '__docVerName=&quot;'), '&quot;')"/>
<xsl:variable name="astDate" select="substring-before(substring-after(., '__docVerDate=&quot;'), '&quot;')"/>

Variable Version: <xsl:value-of select="$astVersion"/>
Variable Date: <xsl:value-of select="$astDate"/>

</xsl:template>

我无法使它在已经用于将主题信息拉入输出文件的标题中的另一个模板中工作。

    <xsl:template
        match="*[contains(@class, ' topic/topic ')][not(parent::*[contains(@class, ' topic/topic ')])]/*[contains(@class, ' topic/title ')]">

如何在此模板匹配项中添加“ processing-instruction('ASTDOCREVINFO')”?

1 个答案:

答案 0 :(得分:0)

您不能将信息从一个模板匹配传递到另一个模板,因为XSLT是没有副作用的,但是在第二个模板中,您可以使用XPath来匹配作为根元素的子元素的处理指令。像这样:

<xsl:template
    match="*[contains(@class, ' topic/topic ')][not(parent::*[contains(@class, ' topic/topic ')])]/*[contains(@class, ' topic/title ')]">
    <!-- /* => means the root element of the XML document -->
    <xsl:variable name="astoriaPI" select="/*/processing-instruction('ASTDOCREVINFO')"/>
    <xsl:variable name="astVersion" select="substring-before(substring-after($astoriaPI, '__docVerName=&quot;'), '&quot;')"/>
    <xsl:variable name="astDate" select="substring-before(substring-after($astoriaPI, '__docVerDate=&quot;'), '&quot;')"/>
</xsl:template>