XML格式是这样的:
<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type='text/xsl' href='stylesheet.xsl'?>
<!--
Test case ID: C:\Me\z\d\e\t\w.ts
Result Test:PASSED
balbalbalbalbalbalbalbalbl
***********************************************************************************************/
-->
<Results IsFinished="No">
....
我是XPath定义的新手,我需要在样式表中为上面评论部分中的测试用例ID提供一个变量。
我对变量的试用看起来像这样:
<xsl:param name="text" select="/"/>
<xsl:variablename="TestScript" select="substring-after($text, 'Test case ID:')"/>
...
此变量稍后在模板中使用:
<xsl:template name="test_name">
<xsl:param name="text" select="."/>
<xsl:choose>
<xsl:when test="contains($text, 'Test case ID:')">
<xsl:call-template name="break_2">
<xsl:with-param name="text" select="$TestScript"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
</xsl:template>
虽然稍后在调用模板时变量的值不会显示,但两者都找不到声明它的方法全局(如上面显示的试用版,因为本地工作完美)。
在模板中本地声明的工作原理:
<xsl:param name="text" select="."/>
<xsl:choose>
<xsl:when test="contains($text, 'Test case ID:')">
<xsl:variable name="TestScript" select="substring-after($text, 'Test case ID:')"/>
<xsl:call-template name="break_2">
<xsl:with-param name="text" select="$TestScript"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
</xsl:template>
如何全局设置该变量?
答案 0 :(得分:0)
如果要提取的字符串始终位于文档的第一条注释中,则可以执行以下操作:
<xsl:variablename="TestScript" select="substring-after(/comment()[1], 'Test case ID:')"/>
但是,这会在Test Case ID:
C:\Me\z\d\e\t\w.ts
Result Test:PASSED
balbalbalbalbalbalbalbalbl
***********************************************************************************************/
如果你只想要这个ID,请将其包装在另一个substring-before
和normalize-space
中以删除空格和换行符:
<xsl:variablename="TestScript"
select="normalize-space(substring-before(substring-after(/comment()[1], 'Test case ID:'), 'Result'))"/>
答案 1 :(得分:0)
要将测试用例ID转换为全局变量,请将其放在样式表的顶部,在任何模板之外:
<xsl:variable name="caseID" select="substring-before(substring-after(/comment()[1], 'Test case ID: '), ' ')"/>
这将从第一个作为根节点子节点的注释中提取“测试用例ID:”和后续换行之间的子字符串。
我不确定如果你拥有它,你将如何使用这个变量(你的样式表缺少那个部分)。