问问题
635 次
2 回答
2
更通用的方法是定义这样的模板:
<xsl:template name="GetPIAttribute">
<xsl:param name="pi" />
<xsl:param name="attrName" />
<xsl:variable name="toFind" select="concat(' ', $attrName, '=')"/>
<xsl:variable name="piAdjusted" select="concat(' ', normalize-space($pi))"/>
<xsl:variable name="foundMatch" select="substring-after($piAdjusted, $toFind)" />
<xsl:if test="$foundMatch">
<xsl:variable name="delimiter" select="substring($foundMatch, 1, 1)" />
<xsl:value-of select="substring-before(substring-after($foundMatch, $delimiter), $delimiter)"/>
</xsl:if>
</xsl:template>
然后你可以调用它来检索你想要的任何伪属性,如下所示:
<xsl:template match="/">
<xsl:call-template name="GetPIAttribute">
<xsl:with-param name="pi" select="/processing-instruction()[name() = 'table']" />
<xsl:with-param name="attrName" select="'name'" />
</xsl:call-template>
</xsl:template>
这种方法的好处是它考虑了用单引号或双引号括起来的值,并且如果您需要提取多个值,您可以重用它。
于 2013-01-17T10:59:52.277 回答
0
这实际上不是一个属性。这只是处理指令的价值。
我认为获得价值的唯一方法是通过一些字符串操作......
<xsl:template match="processing-instruction()[name()='table']">
<xsl:value-of select="substring-before(substring-after(.,'name="'),'"')"/>
</xsl:template>
于 2013-01-17T09:49:22.460 回答