In het kader van een nieuwe reeks Blogs die dieper op de materie van diverse programmeertalen ingaat, schreef ik het volgende artikel.
Enkele weken terug heb ik een webservice geschreven welke HTTP requests met XML moest ontvangen van een, ook door mij gerealiseerde, Java applicatie. Deze webservice moet in de toekomst door meerdere applicaties worden geïmplementeerd. Om deze reden heb ik ervoor gekozen de te verwachten request en te verzenden responses te definiëren door middel van een XML schema.
Een Java programmeur zal ervan op de hoogte zijn dat ondersteuning voor XML in Java met bijvoorbeeld JAXB prima en eenvoudig te realiseren is. Echter, omdat de webservice gerealiseerd moest worden in PHP heb ik gezocht naar de mogelijkheden van PHP omtrent XML. Meerdere libraries dienen zich op php.net aan.
De eerste XML library die ik heb bekeken was SimpleXML. Het doel van deze library is het eenvoudig maken XML documenten te lezen en te schrijven in PHP. Dit brengt echter direct een nadeel met zich mee: De library is er niet in staat ingewikkelde acties uit te voeren op een XML bestand als de validate aan de hand van een XML schema. Hierdoor viel SimpleXML voor mij al snel af.
Een andere library is XML Parser . Deze is echter niet object georiënteerd opgezet en heeft daarnaast niet de mogelijkheid om XML documenten te valideren, hierdoor viel de library al snel af.
De derde library die ik heb bekeken was XMLReader. Deze library is wel in staat om een XML document te valideren met behulp van een XML schema. Echter, de manier waarop XMLReader een XML bestand parsed (met een pointer) was niet geschikt voor mijn situatie.
Uiteindelijk ben ik beland bij de XML library DOM (Document Object Model). Deze library is verreweg de meest uitgebreide library die PHP biedt. De library is in staat om XML documenten te valideren aan de hand van een XML schema, en biedt een eenvoudige interface om XML documenten te lezen. Om deze redenen, en omdat DOM libraries ook in bijvoorbeeld Java beschikbaar zijn (op een soort gelijke manier) en ik daar al ervaring mee had, heb ik voor deze library gekozen.
Opvallend aan alle libraries is dat ze gebruik maken van de onderliggende library libxml. Dit maakt het mogelijk voor alle libraries de errors op te vragen met de door libxml beschikbaar gestelde class en functies.
Mocht je zelf XML documenten moeten schrijven of lezen met PHP raad ik aan om te beginnen met DOM. Mocht DOM niet voldoen omdat je bijvoorbeeld XPath nodig hebt, is het eenvoudig een DOM object om te zetten naar een SimpleXML object en andersom met de functies [func]dom_import_simplexml[/func] en [func]simplexml_import_dom[/func].
De conclusie is in ieder geval eenvoudig: PHP is prima in staat om XML documenten te verwerken en te genereren!