2009-07-30 14 views
11

में रूट नोड खोजें मेरे पास एक PHP5 DOMDocument है और मैं रूट नोड (रूट तत्व नहीं) खोजने का प्रयास करता हूं।PHP5: DOMDocument

उदाहरण:

<test> 
    <element> 
     <bla1>x</bla1> 
     <bla2>x</bla2> 
    </element> 
    <element> 
     <bla1>y</bla1> 
     <bla2>y</bla2> 
    </element> 
    <element> 
     <bla1>z</bla1> 
     <bla2>z</bla2> 
    </element> 
</test> 

मैं "परीक्षण" की DOMNode पाने के लिए इतना है कि मैं फोन कर सकते हैं चाहते हैं - उदाहरण के लिए - hasChildNodes। मैं "दस्तावेज़ एलिमेंट" प्राप्त कर सकता हूं, लेकिन यह एक काम है। शायद मैं वहां से जा सकता हूँ?

$d = DOMDocument::loadXML($xml); 
// [... do some stuff here to find document's root node ...] 
if ($rootnode->hasChildNodes()) echo 'yayy!' 

अंतर को कौन भर सकता है? मुझे अंधा लगता है।

(जाहिर है, इसमें केवल चाइल्डनोड्स नहीं हैं जिन्हें मैं कॉल करना चाहता हूं - इसलिए नहीं, यह दस्तावेज में मौजूद सामग्री के बारे में जानने के लिए कोई और तरीका खोजने में मदद नहीं करता है। यह सिर्फ मेरे सरल उदाहरण के लिए है। मुझे अंत में एक डोमोडोड चाहिए ।)

+0

ठीक है, समस्या PHP5 और PHP4 और इसके अजीब दस्तावेज के बीच "DOMDocument" और "DomDocument" के बीच कुल भ्रम प्रतीत होती है। मुझे लगता है कि मैंने इसे अभी तय कर लिया है। सभी का धन्यवाद। – BlaM

उत्तर

5
पीएचपी डॉक्स DOMElement is a subclass of DOMNode के अनुसार

, तो यह hasChildNodes() -method वारिस चाहिए।

+0

हमम, ठीक है, यह वास्तव में सच है ... और यदि मैं अपने -> दस्तावेज़ को किसी फ़ंक्शन में नहीं भेजता, तो सबकुछ ठीक से काम करता प्रतीत होता है ... फ़ंक्शन कॉल इस तरह से कुछ खो देता है ... अब यह पता लगाने के लिए ... – BlaM

12

डोम मॉडल- डब्ल्यू 3 सी ने डीओएम को अलग-अलग प्रकार के नोड्स की वृक्ष संरचना में तोड़ दिया है। नोड इंटरफ़ेस सभी तत्वों के लिए आधार इंटरफ़ेस है। इस इंटरफेस को लागू करने वाली सभी वस्तुएं बच्चों से निपटने के तरीकों का पर्दाफाश करती हैं।

$dom=new DomDocument; 
$dom->Load("file.xml"); 
$root=$dom->documentElement; // Root node 
+0

समाधान के रूप में चिह्नित किया जाना चाहिए। – kaiser

55

DOMElementDOMNode फैली हुई है।

आप $ डी> documentElement द्वारा रूटDOMElement मिलता है।

+12

यह वास्तव में चुस्त जवाब होना चाहिए! –

+2

यहां इस संपत्ति के लिए प्रलेखन है http://www.php.net/manual/en/class.domdocument.php#domdocument.props.documentelement – gawpertron

+0

मैं किसी को एक क्लिक सहेज दूंगा। उपर्युक्त दस्तावेज कहता है: 'यह एक सुविधा विशेषता है जो दस्तावेज़ के दस्तावेज़ तत्व के लिए बच्चे नोड तक सीधे पहुंच की अनुमति देती है।' – Ben

0

पहले PHP के लिए 5.1.3 इस आदमी यह पाला है

https://macfoo.wordpress.com/2009/06/03/getting-the-root-node-from-an-xml-string

/** 
* function getXMLRootNode 
* @param string An xml string 
* @return string Return XML root node name 
*/ 

function getXMLRootNode($xmlstr) 
{ 
// Create DOM model 
$doc = new DOMDocument(); 

// Load the XML string 
if(!$doc->loadXML($xmlstr)) 
{ 
throw new Exception('Unable to parse XML string'); 
} 

// Find the root tag name 
$root = $doc->documentElement; 

if(!isset($root)) 
{ 
throw new Exception('Unable to find XML root node'); 
} 

if(!isset($root->nodeName)) 
{ 
throw new Exception('Unable to find XML root node name'); 
} 

return $root->nodeName; 
} 

क्रॉस प्रकाशित किया गया था ताकि प्रश्न है कि मैं कैसे करना है खोजने की कोशिश करते हुए मारा इस पूर्व 5.1.3