0

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

<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 ')]">

如何在此模板匹配中添加“处理指令('ASTDOCREVINFO')”?

4

1 回答 1

1

您不能将信息从一个模板匹配传递到另一个模板匹配,因为 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>
于 2019-06-20T04:29:40.510 回答