Lecture d'un nœud XML avec un nom avec trait d'union à l'aide de SimpleXML
En PHP, utiliser SimpleXML pour extraire des données de documents XML devient difficile lorsque vous rencontrez des éléments avec noms avec trait d'union. Examinons ce problème et trouvons une solution.
Considérez le XML suivant :
<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>
Pour lire l'élément document-meta et ses éléments enfants, considérez l'élément code initial suivant :
$xml = simplexml_load_string($gFileData); $namespacesMeta = $xml->getNamespaces(true); $officeXML = $xml->children($namespacesMeta['office']); var_dump($officeXML); echo '<hr />';
Ce code vide tous les éléments enfants immédiats du bureau élément, qui comprend document-meta. Cependant, essayer d'accéder à document-meta directement à l'aide de $officeXML->document-meta échoue et renvoie int 0.
La raison de ce comportement réside dans la gestion par SimpleXML des noms avec trait d'union. Par défaut, il convertit les noms d'éléments avec trait d'union en camelCase. Dans ce cas, « document-meta » devient « documentMeta ». Pour accéder à cet élément, utilisez la syntaxe suivante :
$docMeta = $officeXML->{'document-meta'}; var_dump($docMeta);
En utilisant des accolades et une notation de chaîne, vous pouvez accéder au nom réel de l'élément sans la conversion de casse par défaut de SimpleXML. Cela permettra de vider avec succès l'élément document-meta.
Remarque : Cette syntaxe s'applique uniquement aux nœuds d'élément. Les nœuds d'attribut dans @attributes sont accessibles directement en utilisant la notation matricielle, quelle que soit leur césure.
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!