2010-09-02 11 views
20

मैं निम्न XML है:एक हाइफन नाम के साथ SimpleXML पढ़ना नोड

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

और कार्यालय को पढ़ने के लिए कोशिश कर रहा हूँ: निर्माता, मेटा: creation- नीचे यह (डीसी विभिन्न तत्वों extractthe करने के लिए दस्तावेज़-मेटा नोड तिथि, आदि)

निम्नलिखित कोड:

$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 

मिल मुझे लगता है कि SimpleXML $ से किसी गैर-मौजूद नोड "दस्तावेज़" को निकालने के लिए कोशिश कर रहा है officeXML, फिर (अस्तित्वहीन) निरंतर "मेटा" के मान घटाएं, जिसके परिणामस्वरूप दस्तावेज़-मेटा नोड के बजाय पूर्णांक 0 परिणाम को मजबूर कर दिया जाता है।

क्या SimpleXML का उपयोग करके इसे हल करने का कोई तरीका है, या क्या मुझे XMLReader का उपयोग करके फिर से लिखना होगा? किसी भी मदद की सराहना की।

+1

संभावित डुप्लिकेट [PHP: मैं इस ऑब्जेक्ट प्रॉपर्टी को कैसे एक्सेस करूं?] (Http://stackoverflow.com/questions/758449/php-how-do-i-access-this-object-property) –

उत्तर

36

आपकी धारणा सही है।

$officeXML->{'document-meta'} 

इसे काम करने के लिए उपयोग करें।

कृपया ध्यान दें कि उपर्युक्त तत्वों पर लागू होता है। विशेषता नोड्स (SimpleXmlElement को डंप करते समय @attributes प्रॉपर्टी के भीतर) को हाइफेनेटेड होने पर एक्सेस करने के लिए किसी विशेष वाक्यविन्यास की आवश्यकता नहीं होती है। वे सरणी नोटेशन के माध्यम से नियमित रूप से सुलभ होते हैं, उदा।

$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 और उदाहरणों के लिए देखें।

+0

didn ' मेरे लिए काम नहीं करता है मुझे @ साइन मिला है कि यह सब –

+0

को धन्यवाद देता है, धन्यवाद, यह मुझे सिरदर्द दे रहा था –

+0

इस नोटेशन का उपयोग करने के लिए PHP का किस संस्करण को पुनः प्राप्त किया गया है? –

संबंधित मुद्दे