0

私は次のxmlを持っています

  <root>
      <element id='1'>blah</element>
      <element id='2'>blah</element>
      <element id='3'>blah</element>
  </root>

私のxslに渡されたparmです。

  <Ids>
      <id>1</id>
      <id>2</id>
      <id>3</id> 
  </Ids>

私のxslでは、parmとxmlの両方をループして、parm id値の1つと等しいid属性を持つ要素を一致させたいと考えています。これは動的であり、どちらの値もuuidになります。

これを試しましたが、要素IDのが見つかりません

  <xsl:for-each  select="/$Ids/id">
 <xsl:variable name="driverId" select="."/>
     <xsl:for-each select="/root/element[@id=$driverId]">
          //do something
     </xsl:for-each>
   </xsl:for-each>

それぞれの最初の前に要素idの値をメッセージで送信すると、すべての値を表示できますが、ループ内では表示できません。これは、私が考えている方法で可能ですか。

まだ機能していませんが、
同じ結果に変更しました。

xslで、parmの外に置くと-each

  <test><xsl:for-each select="/root/element/@id"></test>

私は得る

  <test>1 2 3</test>

入れたら

  <test><xsl:for-each select="/root/element/@id"></test>

中身

   <xsl:for-each  select="$Ids/id">

何も返されません???

4

2 に答える 2

1

キーを定義する

<xsl:key name="id" match="element" use="@id"/>

xsl:variable次に、グローバルieを持つプライマリ入力ドキュメントへの参照も必要です

<xsl:variable name="main-root" select="/"/>

あなたがその用途を持ったら

<xsl:for-each select="$Ids//id">
  <xsl:for-each select="key('id', ., $main-root)">...</xsl:for-each>
</xsl:for-each>

必要なキーがなければ

<xsl:for-each select="$Ids//id">
  <xsl:for-each select="$main-root/root/element[@id = current()]">...</xsl:for-each>
</xsl:for-each>
于 2012-11-28T15:11:46.150 に答える
0
<xsl:for-each  select="/$Ids/id">

明らかに間違っています:

/$Ids構文的に正しくありません -- 変数/パラメータの参照は、演算子の直後に続くことはできません/

正しい表現は次のようになります

$Ids/id

そして、あなたが実際に欲しいのは

/root/element[@id=$Ids/id]
于 2012-11-28T14:00:50.667 に答える