使用 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中文网其他相关文章!