使用XSLT2.0:
@ Linenumber 8370这个代码:
<TestCaseElement>
<Name><![CDATA[DUT_AC_ON]]></Name>
<TaggedValues>
</TaggedValues>
<Description>
<Line><![CDATA[{TEXT_LANG} DUT AC ON]]></Line>
<Line><![CDATA[{TEXT_ENGL} DUT AC ON]]></Line>
</Description>
<ModelingToolID><![CDATA[EAID_E9ACC0C9_D383_4ef0_99FF_F87C90BDF43C]]></ModelingToolID>
<Hash><![CDATA[1238228468]]></Hash>
<ID><![CDATA[1115]]></ID>
<Stereotypes>
<Stereotype><![CDATA[StepStart]]></Stereotype>
</Stereotypes>
<Role><![CDATA[TESTSTEP]]></Role>
</TestCaseElement>,然后在XML文档中记录相同的ModelingToolID。
下面是要可视化的图片的外部链接:http://i.imgur.com/vTmki.png
我用这个XSL代码生成ID:
<xsl:for-each select="/TestCases/TestCase/TestCaseElement/ModelingToolID[
( not( ../Stereotypes ) or ( ../Stereotypes/Stereotype != 'Precondition' and
../Stereotypes/Stereotype != 'Postcondition' ) ) and
(../Stereotypes/Stereotype = 'StepStart') and
( ../Role = 'TESTSTEP' or ../Role = 'VP' ) and
../Description and
( generate-id() = generate-id( key( 'ModelingToolID', .)[ 1 ] ) ) ]">您可以在Linenumber 8370和10296中看到两个标识的ModelingToolID。
我在转换中和我想要的输出中都需要TestCaseElements。
但是,可以理解的是,只会采取第一个。
我怎样才能得到两个TestCaseElement的?
发布于 2012-08-30 12:04:25
你可以在Linenumber 8370和10296两个识别码
ModelingToolID中看到。我在转换中和我想要的输出中都需要TestCaseElements。但是,可以理解的是,只有第一个才会被接受。我如何才能得到两个TestCaseElement的?
定义函数key() (没有附加谓词)生成一个节点集,每个节点具有与第二个参数相同的键。
因此,在需要的xsl:for-each 指令中,:
key( 'ModelingToolID', .)这将选择在名为match的xsl:key的"ModelingToolID"属性中匹配匹配模式的所有节点--这正是您想要得到的。
您可以在各种XSLT指令中使用这个表达式。
<xsl:variable name="vGroup" select="key( 'ModelingToolID', .)"/>或
<xsl:for-each select="key( 'ModelingToolID', .)">
<!-- Process the group here -->
</xsl:for-each>或者你需要做的任何事。
https://stackoverflow.com/questions/12196105
复制相似问题