XML pobranie wartości z innego pliku na podstawie klucza

0

Witam.

Mam dość nietypowy problem. Mianowicie mam XML'a, w którym pewne parametry przetrzymuję jako attrybuty w tagu np.

<czołg id="1" działo="3">..</czołg>

i teraz przy wyświetlaniu za pomoca XSL'a chciałbym dobrać się do nazwy działa, które ma ID=3. a np. XML z działami wygląda tak

<działo id="3"><nazwa>Nazwa</nazwa>...</działo>. Jak to zrobić? Chwilowo posiadam tylko coś takiego

<xsl:template match="czołg">
    <tr>
      <td><xsl:value-of select='moc.silnika'/></td>
      <td><xsl:value-of select='limit.prędkości'/></td>
      <td><xsl:value-of select='pancerz'/></td>
      <td>
        <!-- To coś nie działa<xsl:template match="baza.dział/działo/@id={@działo}" />-->
      </td>
      <td><xsl:value-of select='tier'/></td>
    </tr>
</xsl:template>
0

Wrzuć cały xml i xsl albo taki fragment, który ogólnie działa (niekoniecznie w tym zakresie).

0
<?xml-stylesheet href="style.xsl" type="text/xsl"?>  

<baza.dział>
	<działo id='1'>
		<nazwa>
			37 mm Hotchkiss
		</nazwa>
		<penetracja>
			26-43 mm
		</penetracja>
		<średnica>
			37 mm
		</średnica>
		<szybkostrzelność>
			24.0 pocisków/min
		</szybkostrzelność>
	</działo>
	
	
	<działo id='2'>
		<nazwa>
			37 mm Draqun
		</nazwa>
		<penetracja>
			26-43 mm
		</penetracja>
		<średnica>
			37 mm
		</średnica>
		<szybkostrzelność>
			24.0 pocisków/min
		</szybkostrzelność>
	</działo>
	
</baza.dział>
<?xml-stylesheet href="style.xsl" type="text/xsl"?>  
<baza.czołgów>
	<czołg id='1' działo='1'>
		<moc.silnika>
			43
		</moc.silnika>
		<limit.prędkości>
			32
		</limit.prędkości>
		<pancerz>
			18
		</pancerz>
		<tier>
			1
		</tier>
	</czołg>	
	
	<czołg id='2' działo='2'>
		<moc.silnika>
			120 
		</moc.silnika>
		<limit.prędkości>
			80
		</limit.prędkości>
		<pancerz>
			180
		</pancerz>
		<tier>
			100
		</tier>
	</czołg>	
</baza.czołgów>

Fragment XSL'a. Wszystko wyświetla tylko nie wiem jak sie dobrać do wartości z innego pliku

<xsl:template match="czołg">
    <tr>
      <td><xsl:value-of select='moc.silnika'/></td>
      <td><xsl:value-of select='limit.prędkości'/></td>
      <td><xsl:value-of select='pancerz'/></td>
      <td>
        <xsl:for-each select="document('baza.dział.xml')/baza.dział/działo[@id=@działo]">
          <xsl:value-of select="nazwa"/>
        </xsl:for-each>
      </td>
      <td><xsl:value-of select='tier'/></td>
    </tr>
</xsl:template>
</xsl:stylesheet>
1

Napisz coś takiego:

<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:variable name="dziala_xml" select="document('dziala.xml')" />
	<xsl:template match="czołg">
		<xsl:variable name="czolgId" select="@działo" />

		<tr>
			<td>
				<xsl:value-of select='moc.silnika' />
			</td>
			<td>
				<xsl:value-of select='limit.prędkości' />
			</td>
			<td>
				<xsl:value-of select='pancerz' />
			</td>
			<td>
				<xsl:value-of select="$dziala_xml/baza.dział/działo[@id=$czolgId]/nazwa" />
			</td>
			<td>
				<xsl:value-of select='tier' />
			</td>
		</tr>
	</xsl:template>
</xsl:stylesheet>
 
0

Wszystko działa ładnie pięknie. Temat do zamknięcia. Ślicznie dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1