Kombinere data fra flere XML-dokumenter til ett HTML-dokument
Her er et eksempel på hvordan vi kan kombinere data fra flere XML-dokumenter til ett XML-dokument:
Vi lager tre enkle XML-dokumenter som representerer tenkte kapitler i en bok:
kapittel1.xml
<kapittel nummer="1" tittel="Dette er Kapittel 1">
<avsnitt>Dette er avsnitt 1.</avsnitt>
<avsnitt>Dette er avsnitt 2.</avsnitt>
</kapittel>
kapittel2.xml
<kapittel nummer="2" tittel="Dette er Kapittel 2">
<avsnitt>Dette er avsnitt 1.</avsnitt>
<avsnitt>Dette er avsnitt 2.</avsnitt>
<avsnitt>Dette er avsnitt 3.</avsnitt>
</kapittel>
kapittel3.xml
<kapittel nummer="3" tittel="Dette er Kapittel 3">
<avsnitt>Dette er avsnitt 1.</avsnitt>
<avsnitt>Dette er avsnitt 2.</avsnitt>
<avsnitt>Dette er avsnitt 3.</avsnitt>
<avsnitt>Dette er avsnitt 4.</avsnitt>
<avsnitt>Dette er avsnitt 5.</avsnitt>
</kapittel>
Her er et XML-skjema som kapittel-dokumentene kan valideres mot:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="kapittel">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="avsnitt" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="nummer" type="xsd:integer"/>
<xsd:attribute name="tittel" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Dette er et XSL-stilark som bruker funksjonen document() til å sette sammen kapitlene til en bok, dvs til ett html-dokument :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
<xsl:template match="/">
<html>
<head>
<title>Boktittel</title>
</head>
<body>
<h1>Boktittel</h1>
<!--Kapittel 1-->
<xsl:call-template name="kapittel">
<xsl:with-param name="nummer" select="'kapittel1.xml'"/>
</xsl:call-template>
<!--Kapittel 2-->
<xsl:call-template name="kapittel">
<xsl:with-param name="nummer" select="'kapittel2.xml'"/>
</xsl:call-template>
<!--Kapittel 3-->
<xsl:call-template name="kapittel">
<xsl:with-param name="nummer" select="'kapittel3.xml'"/>
</xsl:call-template>
</body>
</html>
</xsl:template>
<xsl:template name="kapittel">
<xsl:param name="nummer"/>
<xsl:for-each select="document($nummer)/kapittel">
<xsl:text>
</xsl:text>
<h2>
<xsl:value-of select="@tittel"/>
</h2>
<xsl:text>
</xsl:text>
<xsl:for-each select="avsnitt">
<p>
<xsl:value-of select="."/>
</p>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Resultatet av å kjøre dette stilarket mot seg selv, blir et HTML-dokument som ser slik ut:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Boktittel</title>
</head>
<body>
<h1>Boktittel</h1>
<h2>Dette er Kapittel 1</h2>
<p>Dette er avsnitt 1.</p>
<p>Dette er avsnitt 2.</p>
<h2>Dette er Kapittel 2</h2>
<p>Dette er avsnitt 1.</p>
<p>Dette er avsnitt 2.</p>
<p>Dette er avsnitt 3.</p>
<h2>Dette er Kapittel 3</h2>
<p>Dette er avsnitt 1.</p>
<p>Dette er avsnitt 2.</p>
<p>Dette er avsnitt 3.</p>
<p>Dette er avsnitt 4.</p>
<p>Dette er avsnitt 5.</p>
</body>
</html>
I en nettleser ser dette dokumentet slik ut:
Boktittel
Dette er Kapittel 1
Dette er avsnitt 1.
Dette er avsnitt 2.
Dette er Kapittel 2
Dette er avsnitt 1.
Dette er avsnitt 2.
Dette er avsnitt 3.
Dette er Kapittel 3
Dette er avsnitt 1.
Dette er avsnitt 2.
Dette er avsnitt 3.
Dette er avsnitt 4.
Dette er avsnitt 5.