Formatering af XML data med CSS

Tags:    xml
Skrevet af Bruger #2086 @ 01.12.2003

XML og CSS


Når man arbejder med XML og CSS er fremgangsmåden den samme som i forbindelse med HTML og CSS. Så hvis du kender HTML og CSS vil det ikke være svært for dig at følge med.
Hvis du derimod ikke kender CSS kan jeg anbefale dig, at besøge min HP
http://cws-webservice.dk og læse lidt om CSS under menupunktet CSS.

Hvis du har læst den artikel jeg har lavet her på Udvikleren der hedder start på XML vil begrebet XML dokumenter sikkert være kendt for dig, hvis du ikke har læst den eller slet ikke kender noget til XML, bør du læse artiklen start på XML før du kaster dig over denne artikel.

Hvis man vælger at formatere sine XML dokumenter med "kun" CSS skal man være klar over, at det er ikke alle browsere der understøtter XML. Med hensyn til hvilke browsere der understøtter XML'en i denne artikel kan nævnes: Internet Explorer 5+, Netscape 6+, Mozilla og Opera 6+.
I denne sammenhæng har man så også alle de lidt mere avancerede CSS egenskaber tilrådighed, da alle de nævnte browsere understøtter CSS ganske godt.

For at jeg kan vise hvordan man laver sin formatering af XML dokumenter med CSS, har jeg i kodeboksen herunder, lavet et XML dokument med en beskrivelse af nogle af mine familie medlemmer. Dokumentet er gemt med navnet xml-css-eks.xml.
Fold kodeboks ind/udKode 


Som du kan se er ovenstående et helt almindeligt XML dokument så det er jo ingen ben i :o)
Men når man benytter XML og CSS sammen skal man huske på, at XML indeholder ingen formatering overhovdet, desuden er XML et tekst format og vil derfor af en browser blive betragtet som kun tekst og derfor som inline elementer.

For lige at uddybe begrebet så tænk på, at Html elementer (tags) har enten inline egenskaber (F.eks <b></b> og <i></i> ) eller block egenskaber (F.eks <div></div> <tr></tr>;) , men det har XML elementer netop ikke fordi de opfattes som rene tekst strenge af en browser.

Så for at jeg kan udføre den formatering af xml-css-eks.xml som jeg har tænkt mig, skal jeg bruge en bestemt CSS egenskab der hedder Display.
Display egenskaben er i dette tilfælde ansvarlig for at vise XML elementerne:
overskrift, fornavn, efternavn, roller, koen, hoejde, vaegt og alder med værdien Block.

Block har to egenskaber:

1. Block tvinger elementer til at starte under hinanden.
2. Block viser et element i hele skærmbredden.

Elementet rolle bliver erklæret med en display egenskab med værdien inline.
Som viser alle rolle elementerne på en linje, uanset hvor mange rolle elementer der er knyttet til et familemedlem.

Ovennævnte er også årsagen til, at alle rolle elementer i familie.xml undtagen det sidste element indeholder et komma i deres tekst indhold.
Så selvom at XML kun skal bruges til at præsentere data, skal man alligevel tænke lidt på hvordan et elements tekst skal præsenteres.

I den kodeboksen herunder kan du se det færdige stylesheet som er gemt med navnet xml-css-eks.css.
Fold kodeboks ind/udKode 

Som du kan se er der ingen forskel på den måde man laver et stylesheet til XML og HTML.
Man bruger bare de navne man har givet sine XML tags som selector, i stedet for som man ville gøre i HTML, at bruge HTML tags som selector.

Der er dog en lille forskel på den måde man henter sit stylesheet i xml.
I HTML bruger man denne link tag:

<link rel=stylesheet href="navn-på-stylesheet.css" type="text/css">
i head delen af sit HTML dokument.

Men når man skal hente et stylesheet i et XML dokument skal man bruge et
PI element der ser sådan her ud:

<?xml-stylesheet type="text/css" href="navn-på-stylesheet.css"?>

Referencen til stylesheetet skal stå lige efter XML PI'en, XML dokumentet vil derfor se ud på denne måde nu.
Fold kodeboks ind/udKode 

Hvis du vil se hvordan dokumentet ser ud i en browser, efter det har fået tilknyttet et stylesheet så klik på linket her under, husk også at tjekke kildekoden så du kan se hvordan XML'en ser ud i sin helhed.

http://udvikleren.dk/articlefiles/2086/xml-css-eks.xml

Designet er måske ikke den helt store men jeg håber, at du kan se de muligheder som XML og CSS tilbyder.

I stylesheetet kunne man f.eks også have lavet noget ekstra formatering til attributten id, som man i CSS referere til med en #, dette faktum er da også en af grundende til at jeg valgt at kalde mine attributter for id.

En erklæring til familiemedlem nr 4 ville se ud på denne måde:
#004 skarpt forfulgt af nogle CSS erklæringer.

Man kan sammenfattet sige at det er kun fantasien der sætter grænsen for layoutet.
Men selvom at man kan lave en masse ting med XML og CSS så er der nogle begrænsninger, man kan f.eks ikke undlade at lave formatering for et element, fordi det så vil blive vist som rå XML data i browseren og det er jo ikke meningen.
Man kan heller ikke bestemme hvilke elementer der skal vises og hvilke der ikke skal vises.

Så jeg vil ikke anbefale dig kun, at bruge XML og CSS medmindre, at du kender dine brugeres browsere på forhånd, men f.eks på en virksomheds Intranet, hvor man ved hvilke browsere der benyttes er fremgangsmåden efter min mening ret smart og ganske let at bruge.






Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (8)

User
Bruger #2730 @ 02.12.03 10:38
Hvorfor ikke lave et XSLT til at præsentere dine XML data med og så i dit XSLT henvise til dit CSS. Det vil give nogle fordele med hensyn til formattering, placering samt mulighed for at lave beregninger, tegninger og alt andet mellem himmel og jord. I stedet for at være fastlagt på lige netop den struktur der er i din XML fil, XSLT ville bringe dette op på et langt højere niveau.
User
Bruger #2086 @ 02.12.03 19:26
Hvorfor ikke lave et XSLT ? spørger du
Det gør jeg såmænd også og det ganske tit.
Men nu har jeg skrevet en artikel der handler om at bruge CSS så derfor har selvklart ikke brugt XSLT i denne artikel.

Jeg afslutter da også artiklen med at anbefale at man ikke KUN bruger CSS, artiklen er lavet af to grunde:

1. For at vise en nem måde at komme igang med at lære og få interresse for XML.

2. Fordi som jeg selv oplevede da jeg begyndte, at lære XML havede jeg svært ved, at se formålet med XML netop fordi, at jeg kunne lave en hjemmeside med Html hvilket jeg ikke kunne med XML.

Problemet er for at få fuldt udbytte af XSLT skal man jo også lære XPath og gerne XMLDOM samt ASP eller PHP o.lign eller til nød JSP/Java også er det måske lidt for stor en mundfuld for mange hvis man i forvejen ikke helt kan se formålet med XML.

Men som man siger den ene ting udelukker jo ikke den anden og jeg er da også igang med en artikel om XSL og senere måske en om XSLT og eller XSLFO

MVH
Claus Pryds
User
Bruger #123 @ 03.12.03 08:22
Rigtig god artikel. Jeg har rodet en del med XML, men kun som data lager for applikationer. Jeg har endnu forsøgt mig med formatering. Du har hjulpet mig igang med dét område.

Jeg synes iøvrigt det er iorden at du ikke berører XSLT i denne artikel. Det er godt nok noget mere kraftfuld end CSS, men det er tilgengæld også noget mere kompliceret (ud fra hvad jeg har læst). En ting af gangen. Stort 4 tal fra mig.
User
Bruger #2086 @ 03.12.03 15:17
Tak for de pæne ord ;o)

Jeg er iøvrigt 100% enig med hensyn til din kommentar omkring XSLT.

User
Bruger #4966 @ 12.02.04 23:08


God artikel. Hvad andet kan jeg sige.
Jeg har aldrig beskæftiget mig med xml før. Det kan da være jeg vil prøve at bruge det ind i mellem.
User
Bruger #2074 @ 14.02.04 23:51
fin artikel til begyndere - den forklarer sammenhængen helt kanon. også god ide med sammenhængen i de 2 første artikler fra din hånd. man kan følge udviklingen i den "base"xml du laver i første afsnit. Keep up da good work
User
Bruger #5358 @ 11.05.04 14:24
jeg har lige læst de 2 første artikler i din serie....
og de er meget gode...
det eneste jeg kunne med xml før Wml og Svg...
nu tror jeg faktisk at jeg skal skrive min næste hp i xml....
User
Bruger #5956 @ 11.12.04 11:44
Nice Artikel..

Keep it up!
Du skal være logget ind for at skrive en kommentar.
t