0

XSLT 2.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 ] ) ) ]">

行番号 8370 と 10296 に、2 つの同一の ModelingToolID があります。
変換と目的の出力の両方に TestCaseElements が必要です。
しかし、当然のことながら、最初の 1 つだけが取得されます。
両方の TestCaseElement を取得するにはどうすればよいですか?

4

1 に答える 1

1

Linenumber 8370 と 10296 に 2 つの同一の がありModelingToolIDます。変換と目的の出力の両方に TestCaseElements が必要です。しかし、当然のことながら、最初の 1 つだけが取得されます。両方の TestCaseElement を取得するにはどうすればよいですか?

関数key()(述語が追加されていない) は、定義により、ノードのノード セットを生成します。各ノードは、2 番目の引数と同じキーを持ちます。

したがって、xsl:for-each命令内で必要なものは次のとおりです。

key( 'ModelingToolID', .)

これにより、名前付きの属性の一致パターンに一致するすべてのノードが選択されます。まさに取得したいものです。matchxsl:key"ModelingToolID"

この式は、さまざまな XSLT 命令で使用できます

<xsl:variable name="vGroup" select="key( 'ModelingToolID', .)"/>

または:

<xsl:for-each select="key( 'ModelingToolID', .)">
  <!-- Process the group here  -->
</xsl:for-each>

または、あなたがする必要があることは何でも。

于 2012-08-30T12:04:25.970 に答える