我有“图书馆”。有书和书的分类。我只想知道如何通过ID显示与图书相关的图书类别。
结果将是一张所有书籍及其类别的表格。
它是用捷克语写的,但我想你会理解的。
骑士=图书馆,骑士=书,kategorie =类别,nazev =名字
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>发布于 2019-04-18 14:11:12
定义如下所示的键:
<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>https://stackoverflow.com/questions/55747565
复制相似问题