2010-08-27 13 views
5

मैं डोम/PHP5 के माध्यम से निम्न XML निर्माण करने के लिए कोशिश कर रहा हूँ:डीओएम/PHP के साथ एक्सएमएल नेमस्पेस उपसर्ग कैसे घोषित करें?

$xml = new DOMDocument('1.0'); 
$root = $xml->createElementNS('myNS', 'root'); 
$xml->appendChild($root); 
$x = $xml->createElementNS('myNS', 'x', 'test'); 
$root->appendChild($x); 
echo $xml->saveXML(); 

यह है कि मैं क्या हो रही है है:

<?xml version="1.0"?> 
<root xmlns:p="myNS"> 
    <p:x>test</p:x> 
</root> 

यह मैं क्या कर रहा है

<?xml version="1.0"?> 
<root xmlns="myNS"> 
    <x>test</x> 
</root> 

मैं क्या गलत कर रहा हूं? इस उपसर्ग को कैसे काम करना है?

उत्तर

10
$root = $xml->createElementNS('myNS', 'root'); 

root नाम स्थान myNS में नहीं होना चाहिए। मूल उदाहरण में, यह नामस्थान में नहीं है।

$x = $xml->createElementNS('myNS', 'x', 'test'); 

क्रमबद्धता एल्गोरिथ्म है कि आप इस नाम स्थान के लिए उपसर्ग के रूप में p का उपयोग करना चाहते करने के लिए सुझाव देने के लिए p:x के बजाय सिर्फ x के qualifiedName सेट करें। हालांकि ध्यान दें कि एक्सएमएल-नेम-नेमस्पेस-जागरूक पाठक के लिए कोई अर्थपूर्ण अंतर नहीं है कि p: का उपयोग किया जाता है या नहीं।

इससे xmlns:p<p:x> तत्व (पहले की आवश्यकता वाले) पर आउटपुट होने की घोषणा होगी। यदि आप इसके बजाय मूल तत्व पर घोषणा करना चाहते हैं (फिर से, एक्सएमएल-नेम-नेमस्पेस रीडर में कोई फर्क नहीं पड़ता), तो आपको स्पष्ट रूप से setAttributeNS करना होगा। उदाहरण:

$root = $xml->createElementNS(null, 'root'); 
$xml->appendChild($root); 
$x = $xml->createElementNS('myNS', 'p:x', 'test'); 
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:p', 'myNS'); 
$root->appendChild($x); 
+1

वाह आपने इसे वास्तव में अच्छी तरह से समझाया है और इस एक उत्तर ने मुझे वास्तव में यह समझने में मदद की है कि नामस्थान वास्तव में PHP डोम में कैसे काम करते हैं! – thomasrutter

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