代码之家  ›  专栏  ›  技术社区  ›  Mark Baker

带有连字符名称的SimpleXML读取节点

  •  20
  • Mark Baker  · 技术社区  · 14 年前

    <?xml version="1.0" encoding="UTF-8"?>
    <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" xmlns:ooo="http://openoffice.org/2004/office" 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>
    

    以下代码:

    $xml = simplexml_load_string($gFileData);
    $namespacesMeta = $xml->getNamespaces(true);
    $officeXML = $xml->children($namespacesMeta['office']);
    var_dump($officeXML);
    echo '<hr />';
    

    给了我:

    object(SimpleXMLElement)[91]
      public 'document-meta' => 
        object(SimpleXMLElement)[93]
          public '@attributes' => 
            array
              'version' => string '1.1' (length=3)
          public 'meta' => 
            object(SimpleXMLElement)[94]
    

    但如果我尝试使用以下方法读取文档元元素:

    $xml = simplexml_load_string($gFileData);
    $namespacesMeta = $xml->getNamespaces(true);
    $officeXML = $xml->children($namespacesMeta['office']);
    $docMeta = $officeXML->document-meta;
    var_dump($docMeta);
    echo '<hr />';
    

    我明白了

    Notice: Use of undefined constant meta - assumed 'meta' in /usr/local/apache/htdocsNewDev/PHPExcel/Classes/PHPExcel/Reader/Gnumeric.php on line 273
    int 0
    

    1 回复  |  直到 11 年前
        1
  •  40
  •   Gordon Haim Evgi    10 年前

    $officeXML->{'document-meta'}
    

    让它工作。

    $xml = <<< XML
    <root>
        <hyphenated-element hyphenated-attribute="bar">foo</hyphenated-element>
    </root>
    XML;
    $root = new SimpleXMLElement($xml);
    echo $root->{'hyphenated-element'}; // prints "foo"
    echo $root->{'hyphenated-element'}['hyphenated-attribute']; // prints "bar"
    

    SimpleXml Basics in the Manual 更多示例。

        2
  •  0
  •   Nek    4 年前

    考虑以下XML:

    <subscribe hello-world="yolo">
        <callback-url>example url</callback-url>
    </subscribe>
    

    <?php
    $xml = (array) simplexml_load_string($input);
    $callback = $xml["callback-url"];
    $attribute = $xml['@attributes']['hello-world'];
    

    它使一切变得容易。希望我能帮上忙。