Mam plik XML, który wygląda jak ten przykład:XSLT sortowania i grupowania udziałem atrybuty
<Data>
<defect>
<record-id>1</record-id>
<custom-field-value field-name="Release Version" field-value="1.0"/>
<custom-field-value field-name="Other info" field-value=""/>
<custom-field-value field-name="More info" field-value="blah"/>
<event include-in-release-notes="yes">
<notes>This is a release note to include</notes>
</event>
<event include-in-release-notes="no">
<notes>This is not a release note</notes>
</event>
</defect>
<defect>
<record-id>2</record-id>
<custom-field-value field-name="Release Version" field-value="1.5"/>
<custom-field-value field-name="Other info" field-value=""/>
<custom-field-value field-name="More info" field-value="blah"/>
<event include-in-release-notes="yes">
<notes>This is a release note to include for 1.5</notes>
</event>
<event include-in-release-notes="no">
<notes>This is not a release note</notes>
</event>
</defect>
</Data>
Co staram się zrobić, to stworzyć informacje o wersji udokumentować, że pierwsze rodzaje i odkryć wszystkie unikalne @ wartości pól wartości elementów, które mają nazwę pola @ równą "Wersja wydania". Mogą istnieć inne elementy, które nie dotyczą wersji Release. Oto wynik Szukam:
Release Version: 1.0
o This is a release note to include
Release Version: 1.5
o This is a release note to include for 1.5
Release Verison: x.x
o one release note
o another release note
Czytałem się kilka o „Muenchian” metody i sortowania i grupowania, ale mam zmaga się z faktem, że mam atrybuty muszę porównać do. Większość z przeczytanych przeze mnie przykładów omawia sortowanie na elementach, które wydają się znacznie bardziej intuicyjne. Muszę znaleźć i posortować wiele atrybutów, moja głowa dopiero zaczyna eksplodować.
mam wymyślić stylów, które będą mi podać wszystkie elementy, które mają „wydanej wersji” jako tekst przy użyciu:
<xsl:key name="keyMajorReleases" match="custom-field-value" use="@field-name"/>
<xsl:for-each select=key('keyMajorReleases', 'Release Version')">
<xsl:sort order="descending" data-type="text" select="@field-value"/>
Ale to daje mi je wszystkie, nie tylko te niepowtarzalne . A potem nie zorientowałem się, jak zdobyć element "event", który ma notatkę wydania, którą muszę wydrukować.
Kiedy próbowałem użyć „generate-id()”, mam tylko jeden wynik, jak myślę, że jest tylko jeden unikalny wpis z mojego wartości znaleźć:
<xsl:for-each select="//custom-field-value[generate-id(.)=generate-id(key('keyMajorReleases', 'Release Version')[1])]">
Tim, dzięki za pomoc! Byłem nieświadomy tej składni w "kluczu" i "selekcji" dla określenia konkretnego atrybutu równego wartości. To sprawiło, dzięki jeszcze raz! – Gunn