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 中国語 Web サイトの他の関連記事を参照してください。