2010-09-02 17 views
20

Aşağıdaki XML vardır:SimpleXML Okuma düğüm

<?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> 

Ve ofis okumaya çalışıyorum: yaratıcısı, meta: eserinin o (doğru akım altında çeşitli unsurları extractthe belge-meta düğüm tarih vb)

aşağıdaki kod:

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

bana verir:

object(SimpleXMLElement)[91] 
    public 'document-meta' => 
    object(SimpleXMLElement)[93] 
     public '@attributes' => 
     array 
      'version' => string '1.1' (length=3) 
     public 'meta' => 
     object(SimpleXMLElement)[94] 
Ben kullanarak belge meta öğesini okumaya çalışırsanız

ama:

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

Ben SimpleXML $ dan varolmayan düğüm "belge" ayıklamak için çalışıyor varsayalım

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

olsun officeXML, sonra (varolmayan) sabit "meta" değerini çıkarır, sonuçta belge-meta düğüm yerine tamsayı 0 sonucunu zorlar.

Bunu SimpleXML kullanarak çözmenin bir yolu var mı, yoksa XMLReader'ı kullanarak yeniden yazmaya zorlanacak mıyım? Herhangi bir yardım takdir edildi.

+1

[PHP: Bu nesne özelliğine nasıl erişirim?] Olası kopyası (http://stackoverflow.com/questions/758449/php-how-do-i-access-this-object-property) –

cevap

36

Varsayımınız doğru. Çalışmasını sağlamak için

kullanın.

Yukarıdakilerin, Öğe düğümleri için geçerli olduğunu unutmayın. Öznitelik düğümleri (SimpleXmlElement öğesini döküldüğünde @attributes özelliği içindekiler), tirelendiğinde erişilecek özel bir sözdizimi gerektirmez. Düzenli olarak dizi gösterimi yoluyla, örn.

$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" 

Daha fazla örnek için SimpleXml Basics in the Manual numaralı resme bakın.

+0

didn ' Benim için çalışıyorum @ işareti var o kadar etki –

+0

Teşekkür ederim, bu bana baş ağrısı veriyordu –

+0

PHP'nin hangi sürümü bu notasyonu kullanmak için reqiured? –