Dette xml vil jeg gerne via xsl have spyttet ud i en tro kopi.
MEN jeg vil forinden gerne have mulighed for at gøre noget ved samtlige <td>tags - f.eks. tilføje attributten align="center". Samt gøre noget ved samtlige <td>tags med attributten id - f.eks. tilføje teksten kr. efter tallet i <td>tag'et, så der står '500 kr.', '150 kr.' etc..
Hvordan gør jeg det simpelt? I ovenstående kan jeg se de enkelte elementers navne, men jeg vil gerne have at dokumentet bliver gennemløbet og kopieret for hver enkelt element - og manipuleret med, når en af (ovenstående) undtagelser nås.
Nogle gode - og simple - forslag til, hvordan jeg tager hul på den opgave?
Se http://www.w3.org/TR/xslt#copying for kode som kopierer det hele: <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>
Deretter skriver du en template som matcher td for å gi td'er spesialbehandling.
Tja ... jo ... men "@*|node()" fordrer vist et krav om en attribut, eller hvad?!? Jeg prøver lige. Og hvordan med <xsl:apply-templates select="@*|node()"/> ... hvis vi forudsætter, at den tager alle noderne med, bliver <td>'erne så ikke gentaget dobbelt, hvis jeg efterfølgende gør noget mere ved dem?
<xsl:template match="test"> <p><xsl:value-of select="."/> og hallo</p> </xsl:template>
Fidusen skulle jo så være, at der i output står 'Hej og hallo'. Men <test> bliver åbenbart ikke fanget, så der står forstat bare 'Hej'. Hvad gør jeg forkert?
Nei, ikke dobbelt. Hvis du har både match="*" og match="td", så er det bare den siste som behandler td, stjerna må nøye seg med det som er igjen etter at mere kresne tempates har forsynt seg.
gjennom XMLSpy, og fikk et resultat som du vil ha det.
Bruker du et foreldet namespace?
Hvilken prosessor bruker du til å lage transformasjonen? Server eller browser eller noe helt annet?
Synes godt om
Slettet bruger
13. oktober 2005 - 11:57#8
Den specifikke apply-templates på test inde i den generelle template skal ud - "test" template'en bliver automatisk apply'et når tid er (medmindre en anden template forhindrer processoren i at fortsætte).
- Husk forresten at id-attributter skal være unikke; Hvis du vil bruge CSS til at "smukificere" tabellen med, skal du nok bruge class-attributten i stedet for (men det er selvfølgelig en helt anden diskussion :-)
Øv ... jeg har prøvet både det ene og det andet - men jeg bliver ved med blot at få "Hej" som output (iht. ovenstående burde jeg jo få "Hej og hallo").
Processor ... det er taget ud af en større sammenhæng, men jeg forsøger at holde det simpelt ... det er vist en IBMparser af en eller anden art (arbejder i WebSphere Studio Appl. etc.).
... så namespace't er vel ok. Men hvorfor <xsl:transform ... og ikke <xsl:stylesheet ... hvad er forskellen, og har det nogen betydning?
Jeg forsøger lige at rode lidt videre ... Gode ideer er velkomne :c)
...lidt svært at trække min xsl-kode ud og teste det i en anden sammenhæng - det jeg pusler med bliver efterfølgende parset/transformeret endnu en gang. Men dette er, hvad jeg indtil tester med:
...så bliver alt indhold lavet om til <p>tags med '- og davs' efter. Så der er altså 'hul igennem' ... men 'match="p"' kan jeg stadig ikke få til at virke.
Et skridt videre - ikke mod en løsning men en forståelse: Mit xml-dokument bliver åbenbart opfattet som en stor klump, og kun den første node bliver behandlet iht. følgende:
...så alt indhold på siden (<p>,<div>,<table> etc.) bliver præsenteret som én samlet klump (<p>...</p>) med et '- og davs' i slutningen. Xml-sidens første node er <section>, som vi bruger i den sammenhæng jeg arbejder.
Så som én samlet klump bliver der ikke kigget efter <p>tags ... Mystisk.
"Xml-sidens første node er <section>, som ...". Ævl - glem det. Men jeg har trukket navnet på den node, som ovenstående tilsyneladende tager udgangspunkt i, og det er 'html' ... men hvorfor h.... der ikke bliver skelet til html's children/grandchildren mv. men hele noden bliver opfattet som en eneste klump (for sådan virker det), ved jeg ikke.
Når du har både match="@*|node()" og match="p", er det sistnevnte som skal håndtere p-elementet ditt, jeg synes det ser ut som om prosessoren din svikter der. Prøve å flytte matchen på p opp over matchen på @*|node()?
Nu har jeg forsøgt at kigge i nogle af de øvrige xsl'er i projektet. Det er ikke så ofte, at vi trækker eks. <p> ud (de bliver oftest tilføjet i xsl'en), men det ene sted jeg fandt et eksempel på et <h>, så det således ud:
NB! janegil og greystate ... I har vel efterhånden svaret på mit oprindelige spørgsmål - at det ikke virker i det miljø, jeg arbejder i, er jo ikke jeres skyld. Er det ok, hvis I deles om points?
x2:h er en overskrift som selv finner ut av hvor store typer den skal ha. Men ditt problem er i XML, det spiller ingen rolle hvilke html-elementer du strir med.
Dette kunne lyde som en support-sak til IBM?
Eller som at du må droppe match="@*|node()" og heller prøve match="@*|*|text()"
Eller at du skal be om å få en oppgradering av XSLT-prosessoren i webshere.
Synes godt om
Slettet bruger
17. oktober 2005 - 21:26#26
For mig lyder det som om din match="p" skal have namespace-prefixet med, altså match="x2:p" - det kan ihvertfald forklare hvorfor den ikke har reageret før...
HAHAHA! Så lykkedes det ... namespace-prefixet gjorde forskellen. Den efterfølgende behandling/tranformation (som jeg ikke er herre over) SKAL åbenbart have det her ns med. Nu virker det. Tak for hjælpen til jer begge ... og som tidligere forespurgt: I har hjulpet meget begge to, og for længst svaret på mit oprindelige spørgsmål ... kan I leve med at deles om pointene?
Venligst - og beruset af lykke :c) Marianne
Synes godt om
Slettet bruger
18. oktober 2005 - 09:55#28
Tillykke med "sejren" Marianne :-)
Mht. point: Det er vidst ikke første gang vi har delt point, vel janegil? :-)
...den der tier samtykker (eller er for sent ude til at have en mening ;c)): Håber det er ok, janegil, mht. at dele med greystate - I har jo tilsyneladende prøvet det før.
Tusind tak for hjælpen til jer begge.
Venligst Marianne
Synes godt om
Ny brugerNybegynder
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.