我有“图书馆”。有书籍和书籍类别。我只是想知道如何显示通过ID与书籍相关联的书籍类别。
结果将是所有书籍及其类别的表格。
它是捷克语,但我想你会理解它。
library = library,book = book,category = category,name = name
XML:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='knihovna.xsl'?>
<knihovna
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="knihovna.xsd"
>
<knihy>
<kniha id_kniha="k-1">
<nazev>Válka s mloky</nazev>
<kategorie>kat-1</kategorie>
</kniha>
<kniha id_kniha="k-2">
<nazev>Povídky z druhé kapsy</nazev>
<kategorie>kat-2</kategorie>
</kniha>
<kniha id_kniha="k-3">
<nazev>Obsluhoval jsem anglického krále</nazev>
<kategorie>kat-1</kategorie>
</kniha>
<kniha id_kniha="k-4">
<nazev>Báječná léta pod psa</nazev>
<kategorie>kat-1</kategorie>
</kniha>
<kniha id_kniha="k-5">
<nazev>Svatý Xaverius</nazev>
<kategorie>kat-3</kategorie>
</kniha>
</knihy>
<kategorie>
<kategorie_knihy id_kategorie="kat-1">
<nazev>Romaneto</nazev>
<kategorie_knihy id_kategorie="kat-2">
<nazev>Román</nazev>
</kategorie_knihy>
<kategorie_knihy id_kategorie="kat-3">
<nazev>Povídka</nazev>
</kategorie_knihy>
<kategorie_knihy id_kategorie="kat-4">
<nazev>Alegorie</nazev>
</kategorie_knihy>
</kategorie>
</knihovna>
XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='knihovna'>
<xs:complexType>
<xs:sequence>
<xs:element name='knihy'>
<xs:complexType>
<xs:sequence>
<xs:element name='kniha' type='knihaVzor' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='kategorie'>
<xs:complexType>
<xs:sequence>
<xs:element name='kategorie_knihy' type='kategorieVzor' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="knihaVzor">
<xs:sequence>
<xs:element name="nazev" type="xs:string"/>
<xs:element name="kategorie" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id_kniha" type="xs:string"/>
</xs:complexType>
<xs:complexType name="kategorieVzor">
<xs:sequence>
<xs:element name="nazev" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id_kategorie" type="xs:string"/>
</xs:complexType>
</xs:restriction>
</xs:simpleType>
</xs:schema>
XSL:
<table width="100%" border="1">
<th>Nazev</th>
<th>Rok vydani</th>
<th>Pocet stran</th>
<xsl:for-each select="knihovna/knihy/kniha">
<tr>
<td>
<xsl:value-of select="nazev" />
</td>
<td>
<xsl:value-of select="rok_vydani" />
</td>
<td>
<xsl:value-of select="pocet_stran" />
</td>
</tr>
</xsl:for-each>
<xsl:for-each select="knihovna/kategorie/kategorie_knihy[@id_kategorie='WHAT HERE?']">
<td>
<xsl:value-of select="nazev" />
</td>
</xsl:for-each>
</table>
像这样定义一个键:
<xsl:key name="categories" match="kategorie_knihy" use="@id_kategorie" />
(这个名字实际上可以在这里!)
然后,在你的xsl:for-each
中使用它做这个...
<xsl:for-each select="key('categories', kategorie)">
<td>
<xsl:value-of select="nazev" />
</td>
</xsl:for-each>
虽然这个xsl:for-each
需要嵌套在kniha
元素的前一个。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:key name="categories" match="kategorie_knihy" use="@id_kategorie" />
<xsl:template match="/">
<table width="100%" border="1">
<th>Nazev</th>
<th>Rok vydani</th>
<th>Pocet stran</th>
<xsl:for-each select="knihovna/knihy/kniha">
<tr>
<td>
<xsl:value-of select="nazev" />
</td>
<td>
<xsl:value-of select="rok_vydani" />
</td>
<td>
<xsl:value-of select="pocet_stran" />
</td>
<xsl:for-each select="key('categories', kategorie)">
<td>
<xsl:value-of select="nazev" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
请注意,如果一本书只能有一个类别,那么根本不需要xsl:for-each
。你可以这样做......
<td>
<xsl:value-of select="pocet_stran" />
</td>
<td>
<xsl:value-of select="key('categories', kategorie)/nazev" />
</td>