XML - hjälp

korvgubbe

Ny medlem
Gick med
13 May 2003
Ort
Sthlm
Hoj
Versys -08
Mina XML-kunskaper är rostiga. Därför behöver jag hjälp att komma igång igen. Jag har goda kunskaper inom applikationsprogramering och webbprogramering så det behöver inte vara på dagisnivå men gärna pedagogiskt med enkla "kom-igång-exempel"

Självklart har jag redan googlat men som vanligt är det en djungel.

Jag vill inte ha någon referenssida där varje detalj finns uppstaplad utan hellre en avskalad sida med färre men bättre exempel.

Jag bygger normalt databasbaserade webbsidor men nu ska jag hjälpa en nära bekant och då är en databas overkill så jag funderade på att använda XML.

Sidan innehåller redan stylesheets.. Jag är bara rostig på XML:andet.. Hur gjorde man lixom?!

Har DU någon favoritsida som fick dig att komma igång?
 
Last edited:
Ett ersätta en databas med XML är egentligen fel tänk. XML är tänkt att användas som datamarkering, inte datalagring. Hur hade du tänkt editera XML-en? Om du ska göra det för hand, så fine, då är det kanske en god idé. Ska du skapa ett CMS, så kommer det nog vara enklare att använda en databas, eller nån budgetvariant (a la Access).

Att komma igång med XML är egentligen ganska enkelt, finns ganska grundläggande regler som du kommer långt med.

Ett xml-dokument påbörjas alltid med

Code:
<?xml version="1.0" encoding="UTF-8"?>

Sedan bör den alltid innehålla en "root"-nod, som skall innehålla alla "child"-noder. I det här exemplet döper jag det till document. Den innehåller också två child-noder som innehåller data på två olika sätt, som attribut, och som "nodvärde".

Code:
<?xml version="1.0" encoding="UTF-8"?>
<document>
    <förnamn value="John" />
    <efternamn>Doe</efternamn>
</document>

En nod kan vara öppen (dvs ha childs) som i exemplet ovan, eller vara självstängande:

Code:
<document /> <-- självstängande

Och en nod, kan även ha attribut:

Code:
<document attribut="värde" />

Det finns flera reserverade tecken som inte är tillåtna som innehåll i en nod. tex kan du inte använda <> inuti en nod om det ska vara rent textinnehåll, då den kommer tro att det är en "child"-nod.

Därför finns det sk CDATA enkapsuleringar. se http://www.w3schools.com/xml/xml_cdata.asp

Code:
<document attribut="värde">
Nodinnehåll som är ren text. att skriva <> här är alltså inte okej, likväl som många andra tecken, tex &.
</document> <-- ej okej.

<document attribut="värde">
<![CDATA[Nodinnehåll som är ren text. att skriva <> här ÄR okej, likväl som många andra tecken, tex &.]]>
</document>


I det här fallet, har du ett giltigt XML-dokument. Problemet blir sedan att på något sätt adressera dessa värden som du vill använda. Till det behövs en form av parser, och det finns flera olika typer som kan användas i flera språk. För att nämna några, så:

SAX
DOM (används i web-sammanhang, javascript tex, tänk getElementById och getElementsByTagName) http://xkr.us/js/dom
E4X (ny metod som stöds natively av firefox 1.5+)
Xpath http://xkr.us/js/xpath

Alla har olika sätt för att adressera informationen, och jag tänker inte gå in på hur det fungerar just nu, måste tyvärr rusa. Hoppas du blev lite klokare.
 
jayjay skrev:
2686714 Ett ersätta en databas med XML är egentligen fel tänk.
Jag ska inte ersätta en befintlig databas med xml. Däremot vill jag få möjligheten att dynamiskt fylla en sida med innehåll. Eftersom jag inte har för avsikt att konstant uppdatera sidan känns XML smidigt eftersom de som har företaget kan gå in och lägga till och ta bort poster i XML-filen utan att behöva tampas med HTML och elände.

Vad det gäller grund-grunderna i XML är jag med. XML ingick i min utbildning och jag har jobbat med det men tyvär var det alldeless för länge sedan och för lite för att det ska sitta i ryggraden. Det jag framförallt behöver är lite bra sidor med övningar och exempel på hur man jobbar med XSL:er... Jag kan nog knåpa ihop XML:en utan större problem men det är själva "visningen" som jag funderar på.

I det här caset handlar det om ett företag som har "aktiviteter" i form av bl.a. utbildningar och events som man säljer. Jag vill att de själva ska kunna gå in och lägga till poster i XML:en och sen har jag sett till att webbsidan sköter resten.

Mest nyfiken är jag på att kunna sortera och filtrera i XSL:en. Varje element kommer ha attribut som säger när de är inlagda, när de ska visas och om det riktar sig mot privatpersoner eller företag.

Jag vill då kunna återanvända en XSL som visar upp innehållet i XML:en och ger möjligheten att filtrera på datumen och sortera på attributet som säger vem man riktar sig mot.

Ett exempel skulle kunna se ut som följer:
Code:
<?xml version="1.0" encoding="ISO8859-1" ?>
<ACTIVITIES>
  <ACTIVITY  INSERTED="2006-12-31" FORWHO="P"> 
  <HEADER>Sluta rök-kurs</HEADER>
    <VISIBLE>
       <START>2007-01-10</START>
       <STOP>2007-02-28</STOP>
    </VISIBLE>
    <TAGLINE>Stoppa begäret</TAGLINE>   
    <MAINIMAGE File="fimp" Type="gif" />
    <INGRESS>Har du försökt sluta röka? Vi hjälper dig...</INGRESS>
    <DESCRIPTION>
       <TEXTBLOCK>
         <CONTENT>Rökning är farligt ajja bajja ... ... .. </CONTENT>
       </TEXTBLOCK>
         <TOPIMG File="lunga" Type="jpg" />
         <CONTENT>ajjsing bajsing skador .. hosta ..lungor..</CONTENT>
    </DESCRIPTION>    
  </ACTIVITY>  
  
</ACTIVITIES>

(Ovanstående exempel är inte validerat utan bara ett utkast)

Det jag alltså vill är att kunna läsa ut dessa poster på olika sidor på websidan.
Rubrik och några ord från ingressen skal t.ex. visas på startsidan bland nyheter om "inserted" är nyare än en månad.

Sidan kommer ha en sida för företag och en för privatpersoner. På dessa skall samtliga aktiviteter listas, med hela ingressen, som är riktade mot respektive målgrupp. Datum skall styra ordningen. Denna sida ska inte heller visa allt innehåll utan först när man klickar på en läs-mer-länk skall allt om aktiviteten visas...

Och därför vill jag använda XML. Ett dokument med data. Visning på flera ställen men med olika layout och olika detaljnivåer.
 
Last edited:
Ok.

Jag syftade inte på att ersätta en befintlig databas, utan använda XML som "datalagring". Du bör ju tänka på att en XML är ganska syntaxkänslig så personen som ska pilla i den bör ha rätt bra koll för att inte fucka till allting.

om du ska använda XSLT för att generera HTML (det är egentligen det du gör, konverterar XML -> HTML med hjälp av XSLT), bör du göra detta serverside, men det har du säkert redan koll på.

I ditt fall blir det då enklare att ha en XSL, för varje sida som ska finnas, och en stor XML för hela kitet. Det strider dock lite mot grundtänket, där du har samma XSL men har olika XML för olika innehåll.

I XSL:en har du möjlighet att loopa genom element, använda logik (if) etc för att särskilja vilken information i XML:en som du ska använda på just den specifika sidan.

http://www.devguru.com/technologies/xslt/home.asp har en referens som kanske inte är helt enkel att ta till sig, men med lite experimenterande så kanske du kommer nån vart. Tänk dock på att du behöver skapa en XSLT-motor först, som tar dels XML:en och XSL:en och konverterar till HTML, som sedan outputas till browsern.

Här har du ett exempel på XML -> HTML konvertering:

http://www.adp-gmbh.ch/xml/xslt_examples.html

Och här har du en vad som till synes ser ut som en grundläggande tutorial:

http://www.zvon.org/xxl/XSLTutorial/Books/Output/example1_ch1.html

Generellt sett kan man väl säga att man bygger uppd et genom att skapa "templates" block eller "foreach" loopar och sedan tar ut information genom att använda "value-of" med select="." (för nuvarande nod) eller select="@attribut" (@ indikerar att du ska selecta ett attribut för nuvarande nod, tex med <foo bar="sporthoj" /> så skulle en <xsl:value-of select="@bar" /> ge "sporthoj", om <foo> var nuvarande nod).
 
Skulle du inte kunna använda dig av SQLite istället? Om du nu inte vill bygga något runt en riktig db är det ett vettigt alternativ.
 
Back
Top