2

返信ありがとうございます。

質問がわかりにくくてすみません。

以下のようにXSLTを作成しました。

`

<xsl:output indent="yes"/>

<xsl:template match="/"> 
      <DataElementsList>
      <xsl:for-each select="//BC4JDataElementTransferObject">
       <xsl:variable name="index" select="count(preceding-sibling::BC4JDataElementTransferObject)+1" />
         <DataElement>
             <PUBLICID>
              <xsl:value-of select="//BC4JDataElementTransferObject[$index]/@public-id"/>
          </PUBLICID>
            <LONGNAME>
              <xsl:value-of select="//BC4JDataElementTransferObject[$index]/long-name"/>
          </LONGNAME>  
         </DataElement>  
      </xsl:for-each>                                                                
    </DataElementsList>
 </xsl:template>

`

これまでのところ、以下のように XML ファイルとして出力しています。

<?xml version="1.0" encoding="UTF-8"?>    
<DataElementsList>
   <DataElement>
      <PUBLICID>2183222</PUBLICID>
      <LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
   </DataElement>
   <DataElement>
     <PUBLICID>7777777</PUBLICID>
     <LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
   </DataElement>
</DataElementsList>

反復可能なタグにカウンターを持たせたい。以下のサンプルをご覧ください。

<?xml version="1.0" encoding="UTF-8"?>    
<DataElementsList>
   <DataElement num="1">
      <PUBLICID>2183222</PUBLICID>
      <LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
   </DataElement>
   <DataElement num="2">
     <PUBLICID>7777777</PUBLICID>
     <LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
   </DataElement>
</DataElementsList>

XSLT から、変換を実行すると、出力 XML のタグ内にカウンターが含まれる「データ要素」タグを作成するにはどうすればよいですか?

4

3 に答える 3

2

XML がどのように見えるかわからないので、その部分についていくつかの仮定を立てます。ただし、基本的な考え方は引き続き機能します。つまり、 を使用しposition()てインデックスを作成するだけです。

このテイクは現在のテイクとは少し異なりますが、より効率的でより良い結果が得られるはずです。

したがって、この XML を使用すると、

<root>
  <BC4JDataElementTransferObject/>
  <BC4JDataElementTransferObject/>
  <BC4JDataElementTransferObject/>
  <BC4JDataElementTransferObject/>
  <BC4JDataElementTransferObject/>
</root>

そして、この XSL をそれに適用します

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/">
    <DataElementsList>
      <xsl:apply-templates select="//BC4JDataElementTransferObject"/>
    </DataElementsList>
  </xsl:template>

  <xsl:template match="BC4JDataElementTransferObject">
    <xsl:variable name="index" select="position()" />
    <DataElement num="{$index}">
      Content here
    </DataElement>
  </xsl:template>

</xsl:stylesheet>

この出力が得られます

<DataElementsList>
  <DataElement num="1">
      Content here
    </DataElement>
  <DataElement num="2">
      Content here
    </DataElement>
  <DataElement num="3">
      Content here
    </DataElement>
  <DataElement num="4">
      Content here
    </DataElement>
  <DataElement num="5">
      Content here
    </DataElement>
</DataElementsList>
于 2013-09-26T21:38:30.773 に答える
1

それに対する別の代替手段position()は、はるかに柔軟/機能的ですxsl:number( http://www.w3.org/TR/xslt#number )。

例:

<DataElement>
    <xsl:attribute name="num">
        <xsl:number/>
    </xsl:attribute>
    <!--additional content...-->
</DataElement>
于 2013-09-27T03:27:27.923 に答える
1

私が質問を正しく理解していれば、「index」変数の値を含む各「DataElement」ノードに「num」属性を追加するだけです。

XSLT でこの要素を置き換えると、次のようになります。

<DataElement>

この要素を使用すると:

<DataElement num="{$index}">

次に、例で提供したように出力を取得する必要があります。

于 2013-09-26T21:06:31.937 に答える