如何在不同的 XSL 模板中使用处理指令值?
How can I use processing instruction value in a different XSL template?
我无法在另一个模板中使用 processing-instruction 属性值,该模板已用于在输出文件的 header 中添加主题详细信息。
<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="'), '"')"/>
Date: <xsl:value-of select="substring-before(substring-after(., '__docVerDate="'), '"')"/>
<xsl:variable name="astVersion" select="substring-before(substring-after(., '__docVerName="'), '"')"/>
<xsl:variable name="astDate" select="substring-before(substring-after(., '__docVerDate="'), '"')"/>
Variable Version: <xsl:value-of select="$astVersion"/>
Variable Date: <xsl:value-of select="$astDate"/>
</xsl:template>
我无法在另一个已用于将主题信息提取到输出文件的 header 中的模板中使用它。
<xsl:template
match="*[contains(@class, ' topic/topic ')][not(parent::*[contains(@class, ' topic/topic ')])]/*[contains(@class, ' topic/title ')]">
如何将 "processing-instruction('ASTDOCREVINFO')" 添加到此模板匹配中?
您不能将信息从一个模板匹配项传递到另一个模板匹配项,因为 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="'), '"')"/>
<xsl:variable name="astDate" select="substring-before(substring-after($astoriaPI, '__docVerDate="'), '"')"/>
</xsl:template>
我无法在另一个模板中使用 processing-instruction 属性值,该模板已用于在输出文件的 header 中添加主题详细信息。
<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="'), '"')"/>
Date: <xsl:value-of select="substring-before(substring-after(., '__docVerDate="'), '"')"/>
<xsl:variable name="astVersion" select="substring-before(substring-after(., '__docVerName="'), '"')"/>
<xsl:variable name="astDate" select="substring-before(substring-after(., '__docVerDate="'), '"')"/>
Variable Version: <xsl:value-of select="$astVersion"/>
Variable Date: <xsl:value-of select="$astDate"/>
</xsl:template>
我无法在另一个已用于将主题信息提取到输出文件的 header 中的模板中使用它。
<xsl:template
match="*[contains(@class, ' topic/topic ')][not(parent::*[contains(@class, ' topic/topic ')])]/*[contains(@class, ' topic/title ')]">
如何将 "processing-instruction('ASTDOCREVINFO')" 添加到此模板匹配中?
您不能将信息从一个模板匹配项传递到另一个模板匹配项,因为 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="'), '"')"/>
<xsl:variable name="astDate" select="substring-before(substring-after($astoriaPI, '__docVerDate="'), '"')"/>
</xsl:template>