1

パフォーマンス テストの目的で、小さな XML ファイルを取得し、XSLT を使用して、そのファイルから大きなファイルを作成したいと考えています。ここでは、元の XML の各エンティティ (以下の例ではキャンペーン ノード) を取得し、ID を変更するだけで n 回コピーする予定です。これを実現するために私が考えることができる唯一の方法は、xsl:for-each select "1 to n" です。しかし、これを行うと、エンティティ ノードにアクセスできなくなったようです (私の場合、xsl:for-each select="campaigns/campaign" は機能しません)。「ここでは使用できません: コンテキスト アイテムは原子値です」というプロセッサ エラーが発生します。「1対n」ループを使用することで、実際のエンティティへのアクセスが失われているようです。アクセスを元に戻すXPath式はありますか、それともこれを実現する方法がまったく異なる考えを持っている人はいますか?

これが私がすることです:

元の XML

<campaigns>    
<campaign id="1" name="test">
<campaign id="2" name="another name">
</cmpaigns>

使ってみたXSLT

<xsl:template match="/">
 <xsl:element name="campaigns">
 <xsl:for-each select="1 to 10">
  <xsl:for-each select="campaigns/campaign">
   <xsl:element name="campaign">
   <xsl:copy-of select="@*[local-name() != 'id']" />
   <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute>
   </xsl:element>
  </xsl:for-each>
 </xsl:for-each>
 </xsl:element>
</xsl:template>
4

1 に答える 1

2

次のように、一致の最初のものとして変数を定義します。

<xsl:variable name="foo" select="."/>

これは$foonodeset 型の変数を定義します。次に、このようにアクセスします

<xsl:for-each select="$foo/campaigns/campaign">
...
</xsl:for-each>
于 2012-05-21T09:52:03.410 に答える