Oversett

Translate to EnglishÜbersetzen Sie zum Deutsch/GermanΜεταφράστε στα ελληνικά/GreekПереведите к русскому/RussianOversetter til Norsk/NorwegianÖversätta till Svensk/Swedishहिन्दी अनुवाद करने के लिए/Hindi
Tradueix al català/CatalanTulkot uz latviešu/LatvianPreložiť do slovenčiny/SlovakVertaal aan het Nederlands/Dutchترجمة الى العربية/ArabicTraduzca al Español/SpanishTraduisez au Français/French
Traduca ad Italiano/ItalianTraduza ao Português/Portuguese日本語に翻訳しなさい /Japanese한국어에게 번역하십시오/Korean中文翻译/Chinese Simplified中文翻译/Chinese TraditionalПереклад на українську/Ukrainian
Avbilde av Moderne Operativsystemer (3 Utgave)
Avbilde av Linux Kjerneutvikling (3 Utgave)
Avbilde av Android Wireless Anvendelsesutvikling
Avbilde av RHCE Rød Hatt Sertifiserte Ingeniør Linux Studiumhåndbok (Eksamen RH302) (Certification Presse)

XSLT 1,0 Flerfoldige Namespace Utgir

Denne posten diskuterer namespaces i XML dokument og XSLT 1,0 stylesheets. Spesielt demonstrerer det flere teknikker å styre namespace prefikser og erklæringer i ytede dokument.

XSLT Variabel Ordner

Jeg svarte nylig et spørsmål på et populært programmererforum om hvordan å lagre og å komme til en matrise av brukerdefinerte variabler i en stylesheet og da looper skjønt de variablene. Jeg forsto at mange fremkallere er ikke familar med de tilgjengelige teknikkene for gjøre dette og bestemte å meg tilføye en adgang i min blogg om dette emnet.

Brukerdefinerte variabelmatriser innenfor stylesheets er del av XSLT spesifikasjon ikke. Den vanlige måten å håndtere dette problemet i XSLT 1,0 stylesheets er å definere en brukerdefinert toppnivådel som tilhører en ikke-null namespace som er forskjellig fra XSLT namspace. Disse brukerdefinerte toppnivåene delene blir typisk brukt om å lagre feilmeldinger, ettersøkingsdata osv. Du kan da komme til disse brukerdefinerte delene fra innenfor din stylesheet ved å behandle stylesheet som et ytterligere kildedokument og innlasting som det bruke dokumentet () funksjon med en tom snor som første argumentet. En tom snor blir interpretert å bety den nåværende stylesheet.

Den følgende stylesheet demonstrerer denne metoden. <xsl : stylesheet xmlns:xsl= http://www.w3.org/1999/XSL/Transform" » versjon =» 1,0" xmlns:foo= http://foo.com" » ekskluderer-resultat-prefikser =» foo»> <xsl : utgangsmetode =» tekst» kode =» utf-8"/> <foo : vars> <foo : var navn =» z1»>Et</foo : var> <foo : var navn =» z2»>B</foo : var> <foo : var navn =» z3»>C</foo : var> <foo : var navn =» z4»>D</foo : var> </foo : vars> <xsl : skabelonkamp =» /»> <xsl : for-hver velger ut =» document(”)/xsl:stylesheet/foo:vars/foo:var” > <Xsl : verdi-av utvalgt =».» /> <xsl : hvis prøve =» posisjonerer () = ! sist ()»> <xsl : tekst>,</xsl : tekst> </xsl : hvis> </xsl:for-each> <xsl : tekst> </xsl : tekst> </xsl : skabelon> </xsl : stylesheet>

Hvis du bruker XSLT 2,0, er denne metoden ikke mer trengte mens enklere og mer elegant metoder er tilgjengelig til oss. For eksempel kan du lagre og direkte kan komme til variablene som bruker det <xsl : variabel> Del som vist i den følgende stylesheet. <xsl : stylesheet xmlns:xsl= http://www.w3.org/1999/XSL/Transform" » versjon =» 2,0" > <xsl : utgangsmetode =» tekst» kode =» utf-8"/> <xsl : variabelnavn =» z1» velger ut =» ’A’» /> <xsl : variabelnavn =» z2» velger ut =» ’B’» /> <xsl : variabelnavn =» z3» velger ut =» ’C’» /> <xsl : variabelnavn =» z4» velger ut =» ’D’» /> <xsl : variabelnavn =» vars» velger ut =» $z1, $z2, $z3, $z4"/> <xsl : skabelonkamp =» /»> <xsl : for-hver velger ut =» $vars» > <Xsl : verdi-av utvalgt =».» /> <xsl : hvis prøve =» posisjonerer () = ! sist ()»> <xsl : tekst>,</xsl : tekst> </xsl : hvis> </xsl:for-each> <xsl : tekst> </xsl : tekst> </xsl : skabelon> </xsl : stylesheet>

Enda en måte å lagre og å komme til dene dataene i en XSLT 2,0 stylesheet er å bruke en global variabel definisjon som vist nedenfor. <xsl : stylesheet xmlns:xsl= http://www.w3.org/1999/XSL/Transform" » versjon =» 2,0" > <xsl : utgangsmetode =» tekst» kode =» utf-8"/> <xsl : variabelnavn =» vars»> <var navn =» z1»>Et</var> <var navn =» z2»>B</var> <var navn =» z3»>C</var> <var navn =» z4»>D</var> </xsl : variabel> <xsl : skabelonkamp =» /»> <xsl : for-hver velger ut =» $vars/var» > <Xsl : verdi-av utvalgt =».» /> <xsl : hvis prøve =» posisjonerer () = ! sist ()»> <xsl : tekst>,</xsl : tekst> </xsl : hvis> </xsl:for-each> <xsl : tekst> </xsl : tekst> </xsl : skabelon> </xsl : stylesheet>

All yter tre stylesheets de samme dataene.

Du kan dem undre om dette avbildet. Det er fra skjermen av min bærbarpc. Jeg brukte xsltproc på Microsoft Utsikt SUA for XSLT 1,0 transformasjoner og Saxon 9 i Microsoft Powershell v2.0 CTP2 for den to XSLT 2,0 transformasjoner.

Bemerk det

XSLT Kopi med Unntak

Et nylig problem som ble oppstilt til som meg angikk hvordan å kopiere det hele innholdet av et XML dokument med visse unntak. Vender ut at den enkleste måten å håndtere dette kravet i XSLT1.0 var å inkludere den normale XSL identitetsskabelon i min stylesheet og å tilføye enda en skabelon å håndtere unntaket.

Et enkelt eksempel vil lage ting klar. Anta vi har den følgende XML dokumentet (som jeg kopierte skamløst fra W3Schools.com og modifiserte å forenkle) og vi vil kopiere dette dokumentet i dets helhet unntatt detaljer av CDER ved en spesifikk kunstner. <? Xml versjon =» 1,0" ?> <KATALOG> <CD> <TITTEL>Rike Burlesque</TITTEL> <KUNSTNER>Bob Dylan</KUNSTNER> <LAND>USA</LAND> <SELSKAP>Columbia</SELSKAP> <ÅR>1985</ÅR> </CD> <CD> <TITTEL>Gjemm din hjerte</TITTEL> <KUNSTNER>Bonnie Tyler</KUNSTNER> <LAND>STORBRITANNIA</LAND> <SELSKAP>CBS Noterer</SELSKAP> <ÅR>1988</ÅR> </CD> <CD> <TITTEL>Den største Slagene</TITTEL> <KUNSTNER>Dele Parton</KUNSTNER> <LAND>USA</LAND> <SELSKAP>RCA</SELSKAP> <ÅR>1982</ÅR> </CD> <CD> <TITTEL>En natt bare</TITTEL> <KUNSTNER>Bie Gees</KUNSTNER> <LAND>STORBRITANNIA</LAND> <SELSKAP>Polydor</SELSKAP> <ÅR>1998</ÅR> </CD> <CD> <TITTEL>Sylvias Mor</TITTEL> <KUNSTNER>Dr.krok</KUNSTNER> <LAND>STORBRITANNIA</LAND> <SELSKAP>CBS</SELSKAP> <ÅR>1973</ÅR> </CD> <CD> <TITTEL>Maggie Kan</TITTEL> <KUNSTNER>Kjepp Stewart</KUNSTNER> <LAND>STORBRITANNIA</LAND> <SELSKAP>Pickwick</SELSKAP> <ÅR>1990</ÅR> </CD> </KATALOG>

Under er stylesheet. Det aksepterer en parameter, dvs. navnet, eller del av navnet, av en kunstner. Det kopierer alle knuter og egenskaper til utgangen dokumentet unntatt de knutene og egenskaper som blir forholdt til kunstneren hvis kaller kamper eller er er en overmengde av den tilførte snoret. <? Xml versjon =» 1,0" ?> <xsl : stylesheet xmlns:xsl= http://www.w3.org/1999/XSL/Transform" » versjon =» 1,0"> <xsl : param navn =» kunstner»></xsl : param> <xsl : yt metode =» xml» /> <xsl : skabelonkamp =» knute () | @* «> <xsl : kopier> <xsl : gjelder-skabeloner velger ut =» @* | knute ()» /> </xsl : kopier> </xsl : skabelon> <xsl : skabelonkamp =» /KATALOGISERER/CD»> <xsl : hvis prøver =» not(contains(./artist,$artist))”> <Xsl : kopi-av utvalgt =».» /> </xsl : hvis> </xsl : skabelon> </xsl : stylesheet>

Første skabelonen er den normale identitet skabelonen fra XSL 1,0 Transformasjonsanbefalinger. Det passer alle egenskaper og alle knuter er barn av andre knuter, og kopierer dem til utgangen dokumentet. Andre skabelonen kansellerer den automatiske å kopiering av det <CD> Knuter og barn, kontroller å se som navnet, eller del av navnet, av kunstneren passer ikke letingen snoret, og gjør bare en dyp kopi av knutene og egenskapene til utgangen dokumentet hvis det ikke er noen kamp.

Å anta deg er på et Linux system, du kan bruke kommandoen ledningen arbeitsxsltproc (som er del av XSLT C bibliotek for GNOME) å omforme inngangsdokumentet inn i det følgende utgang dokumentet når &quotstewart&quot er passert som et parameter til stylesheet. BTW, bemerk bruken av Java stilsnorsitater for parameteret snoret. $ xsltproc -param kunstner «’stewart’» arkiv.xsl arkiv.xml

Her er utgangen dokumentet. Det er en kopi av inngangsdokumentet unntatt «opptegnelsen» for det

XSLT Dynamisk Stievaluering

Denne posten diskuterer problemet av dynamisk XPath uttrykkevaluering i XSLT 1,0 og XSLT 2,0 og hvordan å håndtere det som bruker en EXSLT utvidelsesfunksjon.

XSLT Datetime Formatere

Støtt for dato og tid som formaterer i XSLT 1,0 spesifikasjoner er ikke-eksisterende. Dette har ikke betudt som som tidssnorer bruker XSLT 1,0 ; det lager akkurat det meget hardere å gjøre det og tilføyer mange ekstra ledninger av koden til stylesheets. Men det er noe at alle som utvikler stylesheets slutter opp måtte gjøre. I denne posten viser jeg deg adskillige måter å formatere datoer i XSLT 1,0 og å diskutere noe av den nye datetime formatere og manipuleringsfunksjoner i XSLT 2,0 og XPath 2,0.