次のソースxmlがあるとします。Xsltがfor-eachループの前の要素にアクセスする
<Data Key="SS_001PG"
OC:DataId="001PG"
OC:UniqueIdentifier="01-003"
OC:Status="available"
OC:DateOfBirth="2010-06-29"
OC:Sex="m">
<Event EventOID="123"
OC:EventLocation="we"
OC:StartDate="2010-07-12"
OC:Status="started"
OC:Age="0"
EventRepeatKey="1"></Event>
<Event EventOID="123"
OC:StartDate="2010-07-14"
OC:Status="started"
OC:Age="0"
EventRepeatKey="2"></Event>
</Data>
<Data Key="SS_1"
OC:DataId="1"
OC:UniqueIdentifier="1"
OC:Status="available"
OC:DateOfBirth="2010-07-14"
OC:Sex="m">
<Event EventOID="123"
OC:StartDate="2010-07-16"
OC:EndDate="2010-07-14"
OC:Status="started"
OC:Age="-1"
EventRepeatKey="1"></Event>
</Data>
私たちはそれを処理するために以下のxsltコードを持っています。
<xsl:variable name="repeatedEvents" select="//Event[@EventOID='123']"/>
<xsl:for-each select="$repeatedEvents">
<xsl:sort select="@EventRepeatKey" data-type="number"/>
<xsl:variable name="prevIndex" select="position()-1"/>
<xsl:variable name="prevEvent"
select="$repeatedEvents[position()=$prevIndex]"/>
<xsl:choose>
<xsl:when test="position()=1">
<xsl:value-of select="@EventRepeatKey"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$prevEvent/@EventRepeatKey != @EventRepeatKey">
<xsl:value-of select="@EventRepeatKey"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
あなたが見ることができるように今、私たちは同じEventOIDを持つすべてのイベントを選択し、その後、EventRepeatkeyを使用して要素を並べ替えます。したがって、ソート後、2番目のデータの下のイベントは、最初のデータのイベントの間に入ります。ループの内部では、2番目の要素が処理されている間、前のインデックスを使用して最初の要素にアクセスできますが、3番目の要素が処理されているときは、前のインデックスを使用して2番目の要素にアクセスできません。これは、2番目の要素が3番目の要素よりもツリーの下位にあるためですか?どのように私たちは問題を解決できるか提案?
誰かが助けることができますか?
問題は何ですか?可能な限り簡単な例を提供してください。 –
良い質問、+1。あなたが実際に解決しようとしている問題に対する非常に短く効率的な、完全な解決策については私の答えを見てください。 :) –