Membaca Nod XML dengan Nama Bersempang Menggunakan SimpleXML
Dalam PHP, menggunakan SimpleXML untuk mengekstrak data daripada dokumen XML menjadi mencabar apabila anda menghadapi elemen dengan nama sempang. Mari kita selidiki masalah ini dan cari penyelesaian.
Pertimbangkan XML berikut:
<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>
Untuk membaca elemen document-meta dan elemen anaknya, pertimbangkan kod awal berikut:
$xml = simplexml_load_string($gFileData); $namespacesMeta = $xml->getNamespaces(true); $officeXML = $xml->children($namespacesMeta['office']); var_dump($officeXML); echo '<hr />';
Kod ini membuang semua elemen anak segera bagi Elemen pejabat, yang merangkumi meta-dokumen. Walau bagaimanapun, cubaan untuk mengakses document-meta secara langsung menggunakan $officeXML->document-meta gagal dan mengembalikan int 0.
Sebab bagi tingkah laku ini terletak pada pengendalian nama sempang oleh SimpleXML. Secara lalai, ia menukarkan nama elemen bersempang kepada camelCase. Dalam kes ini, "document-meta" menjadi "documentMeta". Untuk mengakses elemen ini, gunakan sintaks berikut:
$docMeta = $officeXML->{'document-meta'}; var_dump($docMeta);
Dengan menggunakan pendakap kerinting dan tatatanda rentetan, anda boleh mengakses nama elemen sebenar tanpa penukaran huruf lalai SimpleXML. Ini akan berjaya membuang elemen document-meta.
Nota: Sintaks ini hanya digunakan pada nod elemen. Nod atribut dalam @attributes boleh diakses terus menggunakan tatatanda tatasusunan, tanpa mengira sempangnya.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Nama Nod XML Bersempang Menggunakan SimpleXML dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!