0
我想在XSLT中使用key()函數並顯示每個元素「dystrybutor」的屬性值。我知道這可以以更簡單的方式完成,但是如果可能的話,我想這樣做。我想要連接元素「dystrybutor」和「d」。XSLT - 鍵功能
這裏是我的XML
<?xml version='1.0' encoding='UTF-8' ?>
<?xml-stylesheet type="text/css" href="css.css"?>
<document>
<płytoteka>
<bestseller rok="2015">
<płyta id="p01" gatunek="Pop&Rock">
<tytuł>Atramentowa</tytuł>
<wykonawca>Celińska Stanisława</wykonawca>
<data_premiery>2015-05-08</data_premiery>
<dystrybutor idref="d1" />
<cena waluta="PLN">37.49</cena>
<rok_nagrania>2015</rok_nagrania>
</płyta>
<płyta id="p08" gatunek="Pop&Rock">
<tytuł>Składam się z ciągłych powtórzeń</tytuł>
<wykonawca>Rojek Artur</wykonawca>
<data_premiery>2014-04-04</data_premiery>
<dystrybutor idref="d1" />
<cena waluta="PLN">33.99</cena>
<rok_nagrania>2014</rok_nagrania>
</płyta>
</bestseller>
<dystrybutorzy>
<d id="d1">
<nazwa>Firma Księgarska Olesiejuk</nazwa>
<miasto>Ożarów Mazowiecki</miasto>
<ulica nr="91">Poznańska</ulica>
<kod_pocztowy>05-850</kod_pocztowy>
<telefon kier="22">733-51-50</telefon>
</d>
</dystrybutorzy>
</płytoteka>
</document>
和XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="date"
xmlns:math="http://exslt.org/math"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="@* | *[not(node())]" />
<xsl:template match="/document">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/">
<xsl:element name="document">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="//płytoteka">
<xsl:element name="płytoteka">
<xsl:apply-templates select="bestseller" />
<xsl:apply-templates select="dystrybutorzy" />
</xsl:element>
</xsl:template>
<xsl:template match="//dystrybutorzy">
<xsl:element name="dystrybutorzy">
<xsl:apply-templates select="d" />
</xsl:element>
</xsl:template>
<xsl:template match="//d">
<xsl:element name="d">
<xsl:attribute name="id">
<xsl:value-of select="./@id" />
</xsl:attribute>
<xsl:element name="nazwa">
<xsl:value-of select="./nazwa" />
</xsl:element>
<xsl:element name="miasto">
<xsl:value-of select="./miasto" />
</xsl:element>
<xsl:apply-templates select="ulica" />
<xsl:element name="kod_pocztowy">
<xsl:value-of select="./kod_pocztowy" />
</xsl:element>
<xsl:apply-templates select="telefon" />
</xsl:element>
</xsl:template>
<xsl:template match="//telefon">
<xsl:element name="telefon">
<xsl:value-of select="concat('+' , ./@kier,' ',.)"/>
</xsl:element>
</xsl:template>
<xsl:template match="//ulica">
<xsl:element name="ulica">
<xsl:value-of select="concat(.,' ', ./@nr)" />
</xsl:element>
</xsl:template>
<xsl:template match="//bestseller">
<xsl:element name="bestseller">
<xsl:attribute name="rok">
<xsl:value-of select="./@rok" />
</xsl:attribute>
<xsl:apply-templates select="płyta" />
</xsl:element>
</xsl:template>
<xsl:template match="//płyta">
<xsl:element name="płyta">
<xsl:attribute name="id">
<xsl:value-of select="./@id" />
</xsl:attribute>
<xsl:element name="gatunek">
<xsl:value-of select="./@gatunek" />
</xsl:element>
<xsl:element name="tytuł">
<xsl:value-of select="./tytuł" />
</xsl:element>
<xsl:element name="wykonawca">
<xsl:value-of select="./wykonawca" />
</xsl:element>
<xsl:element name="data_premiery">
<xsl:value-of select="./data_premiery" />
</xsl:element>
<xsl:element name="dystrybutor">
<xsl:variable name="WybranyDystrybutor" select="key('dystrybutorKEY', @idref)" />
<!--<xsl:attribute name="idref">
<xsl:value-of select="./dystrybutor/@idref" />
</xsl:attribute>-->
<xsl:attribute name="idref">
<xsl:value-of select="$WybranyDystrybutor/@idref" />
</xsl:attribute>
</xsl:element>
<xsl:apply-templates select="cena"/>
<xsl:element name="rok_nagrania">
<xsl:value-of select="./rok_nagrania" />
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:key use="@idref" name="dystrybutorKEY" match="//bestseller/płyta/dystrybutor" />
<!--<xsl:key use="@id" name="dystrybutorREF" match="//dystrybutorzy/d" />-->
</xsl:stylesheet>
我希望
<?xml version="1.0" encoding="UTF-8"?>
<document>
<płytoteka>
<bestseller rok="2015">
<płyta id="p01">
<gatunek>Pop&Rock</gatunek>
<tytuł>Atramentowa</tytuł>
<wykonawca>Celińska Stanisława</wykonawca>
<data_premiery>2015-05-08</data_premiery>
<dystrybutor idref="d1"/>
<cena>37.49</cena>
<rok_nagrania>2015</rok_nagrania>
</płyta>
<płyta id="p08">
<gatunek>Pop&Rock</gatunek>
<tytuł>Składam się z ciągłych powtórzeń</tytuł>
<wykonawca>Rojek Artur</wykonawca>
<data_premiery>2014-04-04</data_premiery>
<dystrybutor idref="d1"/>
<cena>33.99</cena>
<rok_nagrania>2014</rok_nagrania>
</płyta>
</bestseller>
<dystrybutorzy>
<d id="d1">
<nazwa>Firma Księgarska Olesiejuk</nazwa>
<miasto>Ożarów Mazowiecki</miasto>
<ulica>Poznańska 91</ulica>
<kod_pocztowy>05-850</kod_pocztowy>
<telefon>+22 733-51-50</telefon>
</d>
</dystrybutorzy>
</płytoteka>
</document>
好吧,我明白你的解釋,我的錯誤。我可以引用這個元素
<d id="d1">
這個<dystrybutor idref="d1" />
這裏是鏈接transformation 預先感謝您。
一般情況下,你可以使用一鍵解決交叉引用。我在輸入中看不到任何交叉引用,因此沒有理由使用密鑰。如果您的文件有另一個分支機構描述各種分銷商,並且您想從那裏獲取相關分銷商的詳細信息,情況會有所不同。 –