Lecture de nœuds XML avec des noms avec trait d'union dans SimpleXML
SimpleXML, une bibliothèque PHP pour analyser des documents XML, peut rencontrer des difficultés lors de la lecture de nœuds avec des noms avec trait d'union noms. Par exemple, considérons le XML ci-dessous :
<?xml version="1.0" encoding="UTF-8"?> <gnm:Workbook xmlns:gnm="http://www.gnumeric.org/v10.dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gnumeric.org/v9.xsd"> <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" office:version="1.1"> <office:meta> <dc:creator>Mark Baker</dc:creator> <dc:date>2010-09-01T22:49:33Z</dc:date> <meta:creation-date>2010-09-01T22:48:39Z</meta:creation-date> <meta:editing-cycles>4</meta:editing-cycles> <meta:editing-duration>PT00H04M20S</meta:editing-duration> <meta:generator>OpenOffice.org/3.1$Win32 OpenOffice.org_project/310m11$Build-9399</meta:generator> </office:meta> </office:document-meta> </gnm:Workbook>
Une tentative de lecture du nœud office:document-meta à l'aide de la méthode children() de SimpleXML entraîne l'erreur "Utilisation d'une méta constante non définie - supposée 'méta'". En effet, SimpleXML interprète le trait d'union comme un opérateur de soustraction.
Solution
Pour résoudre ce problème, utilisez des accolades au lieu du trait d'union :
$officeXML->{'document-meta'}
Cette syntaxe vous permet d'accéder au nœud méta-document.
Accès aux traits d'union Attributs
Bien que les noms d'éléments avec trait d'union nécessitent la syntaxe d'accolades, les attributs avec trait d'union sont accessibles en utilisant la notation de tableau régulière :
$root = new SimpleXMLElement($xml); echo $root->{'hyphenated-element'}['hyphenated-attribute']; // prints "bar"
Reportez-vous à la documentation SimpleXML Basics pour des exemples supplémentaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!