Załóżmy, że przekształcam quiz wielokrotnego wyboru z dowolnego formatu XML na HTML. Każdy wybór będzie reprezentowany jako znacznik HTML <li>
w dokumencie wynikowym. Dla każdego wyboru chcę dodać kod HTML class
z correct
do <li>
, jeśli ten wybór był prawidłową odpowiedzią. Dodatkowo, jeśli ten wybór został wybrany przez użytkownika, chcę dodać klasę submitted
do <li>
. W konsekwencji, jeśli wybór jest poprawny, , a także przedłożony, powinien mieć class
z correct submitted
.Czy istnieje elegancki sposób dodawania wielu klas HTML za pomocą XSLT?
O ile mi wiadomo, wartości atrybutów oddzielonych białą przestrzenią nie są częścią modelu danych XML i dlatego nie można ich bezpośrednio utworzyć za pomocą XSLT. Mam jednak wrażenie, że jest lepszy sposób na to, niż zaśmiecanie kodu jednym warunkiem dla każdej możliwej kombinacji klas (co byłoby do przyjęcia w tym przykładzie, ale nieporęczne w bardziej złożonych scenariuszach).
Jak mogę rozwiązać ten problem w elegancki sposób?
Przykład pożądanego rezultatu:
<p>Who trained Obi-Wan Kenobi?</p>
<ul>
<li>Mace Windu</li>
<li class="correct submitted">Qui-Gon Jinn</li>
<li>Ki-Adi-Mundi</li>
<li>Yaddle</li>
</ul>
Właściwie, moim punktem na temat wartości atrybutów rozdzielonych białymi znakami jest to, że XML nie rozpoznaje ich jako odrębnych wartości - jest to jeden długi ciąg znaków (chyba że przeoczyłem część XML). To jest powód, dla którego zawsze czuję się lekko brudny, gdy używam atrybutów klasowych. To powiedziawszy, zdaję sobie sprawę, że o wiele łatwiej jest nam koderom, aby oddzielić klasy od spacji, zamiast wpychać w garść 'elementów podrzędnych' 'wszędzie. –
Jakob
@Jakob: Dodałem więcej szczegółów na temat rozdzielonych spacjami list wartości tworzących jedną wartość atrybutu na końcu mojej odpowiedzi. – NickFitz