Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 0

Znacznik <xsl:key> można wykorzystać do zdefiniowania klucza dla wybranych węzłów XML. Umożliwi to wyszukanie węzłów na podstawie zadanej wartości klucza. Można to zilustrować następującym przykładem. Załóżmy, że dokument XML ma następującą postać:

<?xml version="1.0" encoding="UTF-8"?>
  
<baza-danych xsi:noNamespaceSchemaLocation="baza.xsd"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <panstwa>
    <panstwo id="PL">Polska</panstwo>
    <panstwo id="DE">Niemcy</panstwo>
    <panstwo id="FR">Francja</panstwo>
  </panstwa>
  
  <miasta>
    <miasto panstwo="PL">Warszawa</miasto>
    <miasto panstwo="PL">Poznań</miasto>
    <miasto panstwo="DE">Berlin</miasto>
    <miasto panstwo="DE">Monachium</miasto>
    <miasto panstwo="FR">Paryż</miasto>
  </miasta>
</baza-danych>

Transformata wypisująca nazwy miast i odpowiadające im nazwy państw może wyglądać następująco:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" />
  <xsl:key name="klucz" match="panstwo" use="@id" />

  <xsl:template match="/baza-danych">
    <HTML>
      <HEAD>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
        <TITLE>Lista miast</TITLE>
      </HEAD>
      <BODY>
        <TABLE border="1">
          <TR>
            <TH>MIASTO</TH>
            <TH>PAŃSTWO</TH>
          </TR>
          <xsl:for-each select="miasta/miasto">
            <TR>
              <TD><xsl:value-of select="." /></TD>
              <TD><xsl:value-of select="key('klucz', @panstwo)" /></TD>
            </TR>
          </xsl:for-each>
        </TABLE>
      </BODY>
    </HTML>
  </xsl:template>

</xsl:stylesheet>

 

  • Odpowiedział
  • @ | 13.12.2015
  • TRENER MODERATOR ALTKOM AKADEMII