使用SimpleXML 讀取帶有連字符名稱的XML 節點
在PHP 中,當您遇到以下元素時,使用SimpleXML從XML 文件中提取資料變得具有挑戰性帶連字符的名稱。讓我們深入研究這個問題並找到解決方案。
考慮以下XML:
<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>
要讀取document-meta 元素及其子元素,請考慮下列初始程式碼:
$xml = simplexml_load_string($gFileData); $namespacesMeta = $xml->getNamespaces(true); $officeXML = $xml->children($namespacesMeta['office']); var_dump($officeXML); echo '<hr />';
此程式碼轉儲office 元素,其中包括document-meta。但是,嘗試使用 $officeXML->document-meta 直接存取 document-meta 會失敗並傳回 int 0。
此行為的原因在於 SimpleXML 對連字號名稱的處理。預設情況下,它將連字符元素名稱轉換為駝峰命名法。在這種情況下,「document-meta」變成「documentMeta」。要存取此元素,請使用以下語法:
$docMeta = $officeXML->{'document-meta'}; var_dump($docMeta);
透過使用大括號和字串表示法,您可以存取實際的元素名稱,而無需 SimpleXML 的預設大小寫轉換。這將成功轉儲 document-meta 元素。
注意: 此語法僅適用於元素節點。 @attributes 中的屬性節點可以使用數組表示法直接訪問,無論它們的連字符如何。
以上是如何在 PHP 中使用 SimpleXML 存取帶連字符的 XML 節點名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!