Avatar billede janegil Nybegynder
12. september 2004 - 13:16 Der er 3 kommentarer og
1 løsning

Å kopiere alt, bortsett fra EnglishWord-elementene.

http://landsbank.fo/test/cyc.xsl er et forsøk på å kopiere hele source-dokumentet, bortsett fra EnglishWord-elementene med innhold.

Tanken er at <xsl:template match="EnglishWord"></xsl:template> skal fjerne dem.

Men det virker ikke, som input http://landsbank.fo/test/test.rdf.xml og output http://landsbank.fo/test/short.cyc.rdf.xml viser. (Jeg har prøvd både Sablotron, Microsoft og XMLspy transformasjon, så jeg er rimelig sikker på at feilen er min.)

Så: hvordan kan jeg filtrere bort navngitte elementer med XSLT?
Avatar billede Slettet bruger
12. september 2004 - 20:47 #1
Jeg kan få det til at forsvinde (MSXML) ved at specificere et prefix til det namespace <EnglishWord/> findes i, altså:

xmlns:def="http://www.cyc.com/2003/04/01/cyc#"

- og bruge det i template'en:

<xsl:template match="def:EnglishWord"></xsl:template>

/CS
Avatar billede janegil Nybegynder
12. september 2004 - 21:59 #2
Ja!

Med
xmlns="http://www.cyc.com/2003/04/01/cyc#"
i som default namespace i kildedokumentet
og
xmlns:cyc="http://www.cyc.com/2003/04/01/cyc#"
prefiks deklarert i stilarket vil
match="cyc:EnglishWord"
i stilarket selvfølgelig matche
<EnglishWord/>
i kilden.

Og - halleluja - jeg trenger ikke bruke editor på en 5MB kildefil, jeg kan redigere den med en ultraeffektiv Sablotron .bat-fil.

(Dog kunne jeg tenke meg å vite hvorfor det ikke fungerer med default namespace i stilarket, men tusen takk, at det virker er det viktigste.)
Avatar billede Slettet bruger
13. september 2004 - 22:52 #3
Ahem - jeg er ikke helt med på den med editoren og de 5MB - kildefilen behøver du jo ikke røre ved?? (Eller missede jeg noget der?)

Grunden til at det ikke virker med <xsl:template match="EnglishWord"> er at man her beder om at matche "EnglishWord" elementer der ikke tilhører noget namespace (eller som ligger i det specielle "null" namespace).

/CS
Avatar billede janegil Nybegynder
14. september 2004 - 09:44 #4
1)
Ja, halleluja-ropet mitt refererte nettopp til at jeg ikke behøver å røre ved kildefilen.

2)
Forklaringen din er sikkert riktig. Men det er noe som lukter i implementasjonene her. For jeg hadde deklarert et default namespace i http://landsbank.fo/test/cyc.xsl, og min <xsl:template match="EnglishWord"> skulle dermed matche EnglishWord fra http://www.cyc.com/2003/04/01/cyc# namespace.

Konklusjonen er i alle fall at man skal huske på at et element med default namespace i stilarket, ikke matcher samme element med samme default namespace i kilden. Det virker en smule kontraintuitivt?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester