Har du jobbet med eldre enterprise-API-er, konsumert RSS-feeder, åpnet en .docx-fil
eller tegnet en SVG, har du brukt XML — selv om du ikke visste det. XML driver mer av programvareverdenen
enn de fleste utviklere er klar over. Det er eldre enn JSON, mer omstendelig og mer komplekst — men også
mer kapabelt i spesifikke sammenhenger. Dette er en praktisk guide til hva XML faktisk er, hvordan det
fungerer, og når det fortsatt gir mening å bruke det.
XML står for eXtensible Markup Language (Utvidbart markeringsspråk). W3C publiserte XML 1.0-spesifikasjonen i 1998, og det ble det dominerende datautvekslingsformatet i webbens tidlige epoke. Delen "utvidbar" er nøkkelen: i motsetning til HTML som har et fast sett med tagger, lar XML deg definere egne tagger for å beskrive en hvilken som helst datastruktur du trenger.
Slik ser XML ut
Her er et komplett XML-dokument som representerer et produkt fra et e-handels-API. Dette dekker alle kjernesyntaksfunksjonene du vil støte på:
<?xml version="1.0" encoding="UTF-8"?>
<product id="SKU-8821" inStock="true">
<name>Wireless Noise-Cancelling Headphones</name>
<brand>SoundCore</brand>
<price currency="USD">149.99</price>
<categories>
<category>Electronics</category>
<category>Audio</category>
<category>Accessories</category>
</categories>
<specs>
<spec name="battery">30 hours</spec>
<spec name="connectivity">Bluetooth 5.2</spec>
<spec name="weight">250g</spec>
</specs>
<description>
Premium wireless headphones with active noise cancellation,
30-hour battery life, and foldable design.
</description>
</product>La oss gå gjennom de viktigste delene. Den første linjen er XML-deklarasjonen — den forteller parsere
at dette er XML 1.0 kodet i UTF-8. Taggen <product> er rotelementet (hvert
XML-dokument har nøyaktig ett). Delene id og inStock på samme tagg
er attributter. Alt innenfor åpnings- og lukkingstaggen er enten barne-elementer,
attributter eller tekstinnhold.
Elementer vs. attributter — en reell designbeslutning
Noe som forvirrer nye XML-forfattere: du kan representere de samme dataene som et element eller som et attributt. Begge disse er gyldig XML for det samme datapunktet:
<!-- Som et attributt -->
<price currency="USD">149.99</price>
<!-- Som et barne-element -->
<price>
<amount>149.99</amount>
<currency>USD</currency>
</price>Det konvensjonelle rådet: bruk attributter for metadata om elementet (identifikatorer, flagg, enheter), og bruk barne-elementer for det faktiske datainnholdet — særlig hvis innholdet kan bli komplekst, gjentatt eller trenge egne attributter i fremtiden. Attributter kan bare holde ren tekst; barne-elementer kan holde en hvilken som helst XML-struktur.
Velformet vs. gyldig — to forskjellige standarder
XML har to nivåer av korrekthet som ofte forveksles:
- Velformet XML følger de grunnleggende syntaksreglene: ett rotelement, alle tagger korrekt lukket, attributter i anførselstegn, ingen ulovlige tegn. Enhver XML-parser kan kontrollere dette.
- Gyldig XML er i samsvar med et bestemt skjema — enten et DTD (Document Type Definition) eller et XML Schema (XSD). Gyldighetssjekk krever både dokumentet og skjemaet. Du kan ha velformet XML som ikke er gyldig mot et bestemt skjema.
Steder i den virkelige verden der XML dukker opp
- SOAP-webtjenester. Den eldre halvdelen av enterprise-programvare kjører fortsatt på SOAP — bank-API-er, ERP-systemer, betalingsgatewayer. Hver SOAP-melding er et veldefinert XML-dokument med en Envelope, Header og Body.
- RSS- og Atom-feeder. Hver podcastfeed, nyhetssitefeed og YouTube-kanalabonnement er et XML-dokument. RSS 2.0 og Atom er begge XML-baserte formater som har eksistert siden tidlig 2000-tall.
- SVG-bilder. Skalerbar vektorgrafikk er XML. Når du åpner en
.svg-fil i en teksteditor, leser du XML. Det er derfor du kan style SVG-er med CSS og manipulere dem med JavaScript. - Office-dokumenter. En
.docx-,.xlsx- eller.pptx-fil er et ZIP-arkiv som inneholder XML-filer. Office Open XML er hvordan Microsoft lagrer alle moderne Office-dokumentformater. - Android-oppsett. Android UI-oppsett er definert i XML-filer. Hvis du har drevet med Android-utvikling, har du skrevet mye XML.
- Maven og pom.xml. Javas Maven-byggesystem bruker en
pom.xml-fil for å definere prosjektavhengigheter og byggekonfigurasjon — kjent for enhver Java-utvikler.
Parsing av XML i JavaScript — DOMParser
I nettleseren kan du parse XML-strenger ved hjelp av det innebygde
DOMParser-API-et.
Det fungerer på samme måte som parsing av HTML:
const xmlString = `<?xml version="1.0"?>
<product id="SKU-8821">
<name>Wireless Headphones</name>
<price currency="USD">149.99</price>
<categories>
<category>Electronics</category>
<category>Audio</category>
</categories>
</product>`;
const parser = new DOMParser();
const doc = parser.parseFromString(xmlString, 'application/xml');
// Sjekk for parse-feil
const parseError = doc.querySelector('parsererror');
if (parseError) {
console.error('XML parse error:', parseError.textContent);
} else {
const name = doc.querySelector('name').textContent;
const currency = doc.querySelector('price').getAttribute('currency');
const categories = [...doc.querySelectorAll('category')].map(el => el.textContent);
console.log(name); // Wireless Headphones
console.log(currency); // USD
console.log(categories); // ['Electronics', 'Audio']
}Parsing av XML i Python — ElementTree
Pythons standardbibliotek inkluderer
xml.etree.ElementTree
— ingen tredjepartspakker trengs for grunnleggende XML-parsing:
import xml.etree.ElementTree as ET
xml_string = """<?xml version="1.0"?>
<product id="SKU-8821">
<name>Wireless Headphones</name>
<price currency="USD">149.99</price>
<categories>
<category>Electronics</category>
<category>Audio</category>
</categories>
</product>"""
root = ET.fromstring(xml_string)
name = root.find('name').text
currency = root.find('price').get('currency')
categories = [el.text for el in root.findall('categories/category')]
print(name) # Wireless Headphones
print(currency) # USD
print(categories) # ['Electronics', 'Audio']Fallgruver som biter XML-forfattere
- Entitetskoding. Fem tegn må escapes i XML-tekst og attributtverdier:
&→&,<→<,>→>,"→",'→'. Å glemme å escape et ampersand i en URL ødelegger hele dokumentet. - Navnerom. XML med navnerom ser ut som
<soap:Envelope xmlns:soap="...">. Spørringer uten navneromsbevissthet vil ikke finne elementer. Dette er en av de vanligste XML-parsing-feilene. - Mellomromssensitivitet. Mellomrom mellom elementer er teknisk sett meningsfullt i XML (i motsetning til HTML). De fleste parsere håndterer dette fornuftig, men det kan forårsake overraskelser ved sammenligning av dokumenter.
- Tegnkoding. XML-deklarasjonen bør samsvare med den faktiske filkodingen. En UTF-8-fil deklarert som ISO-8859-1 vil bli parset feil for alle ikke-ASCII-tegn.
- Ingen innebygd array-type. XML har ikke arrayer. Du representerer lister ved å gjenta elementer, noe som betyr at parsere returnerer NodeLists snarere enn JavaScript-arrayer — konverter alltid med
Array.from()eller spread.
XML-verktøy det er verdt å kjenne til
Jobber du regelmessig med XML? Disse verktøyene sparer deg tid: XML Formatter for å formatere minifiserte XML-svar, XML Validator for å sjekke velformethet, XML to JSON for å konvertere XML-svar til JSON for enklere håndtering, og XML XPath for å teste XPath-spørringer mot et dokument.
Oppsummering
XML er mer omstendelig og komplekst enn JSON, men det er ikke et gammeldags levn — det er fundamentet for SVG, Office-dokumenter, RSS-feeder, SOAP-tjenester og Android-brukergrensesnitt. Å forstå element/attributt-distinksjonen, forskjellen mellom velformet og gyldig XML, og de vanlige fallgruvene rundt entitetskoding og navnerom vil tjene deg godt når XML dukker opp i arbeidet ditt. Og det vil det gjøre.