我是XSLT的新手,我想选择
biblioteka/ksiazki/ksiazka/tytul
基于
biblioteka/osoby/osoba/wypozyczenie[@idKsiazki]
换句话说:根据ksiazka[@id=@idKsiazki]/tytul
中的@idKsiazki
查找wypozyczenie
。
我不能使用静态值例如'hp1',因为我在<xsl:foreach>
和@idKsiazki
中进行了更改。
然而,我试图在这里找到答案,但没有人真的有帮助。 这是我的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<biblioteka>
<osoby>
<osoba plec="M">
<imie>Karol</imie>
<nazwisko>Karolowski</nazwisko>
<adres>
<miejscowosc>Kołczygłowy</miejscowosc>
<ulica>Pomorska</ulica>
<nr-domu>5</nr-domu>
<kod-pocztowy>76-200</kod-pocztowy>
</adres>
<dane_kontaktowe>
<tel-stac>123412312</tel-stac>
<tel-kom>213214321</tel-kom>
<e-mail>gfdfd@gmail.com</e-mail>
</dane_kontaktowe>
<konto>
<login>KKarolowski</login>
<haslo>123</haslo>
</konto>
<wypozyczenie idKsiazki="prj2">
<dataWypozyczenia>2014-04-08</dataWypozyczenia>
<dataZwrotu>2014-04-10</dataZwrotu>
</wypozyczenie>
</osoba>
<osoba plec="K">
<imie>Marlena</imie>
<nazwisko>Marlenowska</nazwisko>
<adres>
<miejscowosc>Białystog</miejscowosc>
<ulica>Szybka</ulica>
<nr-domu>99</nr-domu>
<kod-pocztowy>76-200</kod-pocztowy>
</adres>
<dane_kontaktowe>
<tel-stac>213214321</tel-stac>
<tel-kom>123412312</tel-kom>
<e-mail>gfdfd@gmail.com</e-mail>
</dane_kontaktowe>
<konto>
<login>MMarlenowska</login>
<haslo>123</haslo>
</konto>
<wypozyczenie idKsiazki="hp1">
<dataWypozyczenia>2014-04-08</dataWypozyczenia>
<dataZwrotu>2014-04-10</dataZwrotu>
</wypozyczenie>
</osoba>
</osoby>
<ksiazki>
<ksiazka oprawa="twarda" id="hp1">
<tytul>Harry Potter i Książę Półkrwi</tytul>
<autor>Joanne K. Rowling</autor>
<opis>Po nieudanej próbie przechwycenia przepowiedni Lord</opis>
<id>hp1</id>
</ksiazka>
<ksiazka oprawa="twarda" id="asm5">
<tytul>Programowanie Asembler IBM PC</tytul>
<autor>Peter Abel</autor>
<opis>Ta książka jest zarówno podręcznikiem</opis>
<id>asm5</id>
</ksiazka>
<ksiazka oprawa="miekka" id="lond1">
<tytul>Londyn - przewodnik</tytul>
<autor>Kathleen Becker</autor>
<opis>Z przewodnikiem z nowej serii "Marco Polo"</opis>
<id>lond1</id>
</ksiazka>
<ksiazka oprawa="miekka" id="prajav2">
<tytul>Programowanie obiektowe i zdarzeniowe w Javie</tytul>
<autor>Krzysztof Barteczko</autor>
<opis>W książce przedstawiono</opis>
<id>prjav2</id>
</ksiazka>
<ksiazka oprawa="twarda" id="kldv3">
<tytul>Kod Leonarda da Vinci</tytul>
<autor>Dan Brown</autor>
<opis>W Luwrze zostaje popełnione morderstwo.</opis>
<id>kldv3</id>
</ksiazka>
</ksiazki>
</biblioteka>
编辑: 那里的“Nazwa”应该是书名。 输出应该是(在HTML中):
Karol Karolowski
Wypozyczone ksiazki:
Nazwa:Harry Potter i Książę Półkrwi
Data wypozyczenia:2014-04-08
Data zwrotu:2014-04-10
//if more books are rent
Nazwa:...
Data wypozyczenia:...
Data zwrotu:...
这是我的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="ksiazka-by-id" match="ksiazka" use="@id" />
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<head></head>
<body>
<h2>Biblioteka</h2>
<xsl:for-each select="biblioteka/osoby/osoba">
<div><br />
<xsl:value-of select="imie"/>
<xsl:value-of select="nazwisko"/>
<p>Wypozyczone ksiazki:</p>
Nazwa: //here the book name
<br/>
Data Wypozyczenia: <xsl:value-of select="wypozyczenie/dataWypozyczenia"/><br />
Data Zwrotu: <xsl:value-of select="wypozyczenie/dataZwrotu"/>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
XSLT具有内置的 a Button constructor overload 机制来解决交叉引用。这是一个简化的例子:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="ksiazka-by-id" match="ksiazka" use="@id" />
<xsl:template match="/biblioteka">
<result>
<xsl:for-each select="osoby/osoba">
<xsl:copy>
<xsl:copy-of select="@plec | imie | nazwisko"/>
<lookup>
<xsl:for-each select="wypozyczenie">
<xsl:copy-of select="key('ksiazka-by-id', @idKsiazki)/tytul"/>
</xsl:for-each>
</lookup>
</xsl:copy>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果将是:
<result>
<osoba plec="M">
<imie>Karol</imie>
<nazwisko>Karolowski</nazwisko>
<lookup/>
</osoba>
<osoba plec="K">
<imie>Marlena</imie>
<nazwisko>Marlenowska</nazwisko>
<lookup>
<tytul>Harry Potter i Książę Półkrwi</tytul>
</lookup>
</osoba>
</result>