2010-02-10 12 views
7

मैं कुछ PHP पर काम कर रहा हूं ताकि डीओएम एक्सटेंशन का उपयोग कर डेटाबेस से एक्सएमएल बनाया जा सके।PHP डोम एक्सएमएल - एकाधिक नेमस्पेस विशेषताओं को बनाएँ?

असल में, मैं यह करने के लिए एक नाम स्थान 3 गुण बना सकते हैं और जोड़ने की जरूरत:

<NameSpaceName xmlns="uri:xxx" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="uri:xxx"> 

पूर्ण कोड मैं लिखा है नीचे है:

include_once("includes/connect.php"); 

$sql = ("SELECT * FROM tableName"); 
$query = mysql_query($sql) or die("Error: " . mysql_error()); 


// create a new XML document 
$doc = new DomDocument('1.0', 'UTF-8'); 

// create root node 
$root = $doc->createElementNS('uri:xxx', 'PayerRecords'); 
$root = $doc->appendChild($root); 
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); 
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xsi:schemaLocation', 'uri:xxx'); 

// process one row at a time 
while($row = mysql_fetch_assoc($query)) { 

    // add node for each row 
    $occ = $doc->createElement('Content'); 
    $occ = $root->appendChild($occ); 

    // add a child node for each field 
    foreach ($row as $fieldname => $fieldvalue) { 

    $child = $doc->createElement($fieldname); 
    $child = $occ->appendChild($child); 

    $value = $doc->createTextNode($fieldvalue); 
    $value = $child->appendChild($value); 

    } // foreach 

} // while 

// get completed xml document 
$xml_string = $doc->saveXML(); 

echo $xml_string; 

लेकिन जब मैं ऊपर मैं निष्पादित यह त्रुटि प्राप्त करें:

Fatal error: Uncaught exception 'DOMException' with message 'Namespace Error' in xml.php:21 Stack trace: #0 xml.php(21): DOMElement->setAttributeNS(' http://www.w3.o ...', 'xsi:schemaLocat...', 'uri:xxx...') #1 {main} thrown in xml.php on line 21

लाइन 21 दूसरी 'setAttributeNS' पंक्ति है।

क्या कोई देख सकता है कि मैं कहां गलत हो रहा हूं?

उत्तर

15

schemaLocation नाम स्थान http://www.w3.org/2000/xmlns/ में घोषित नहीं किया गया है लेकिन http://www.w3.org/2001/XMLSchema-instance

<?php 
// create a new XML document 
$doc = new DomDocument('1.0', 'UTF-8'); 
// create root node 
$root = $doc->createElementNS('http://xxx', 'PayerRecords'); 
$root = $doc->appendChild($root); 
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); 
$root->setAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation', 'http://xxx'); 

echo $doc->savexml(); 

प्रिंट

<?xml version="1.0" encoding="UTF-8"?> 
<PayerRecords xmlns="http://xxx" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://xxx"/> 
2

साथ

$root->setAttributeNS(
    'http://www.w3.org/2001/XMLSchema-instance', 
    'xsi:schemaLocation', 
    'http://xxx http://xxx/xxx.xsd' 
); 

xsi:schemaLocationhttp://www.w3.org/2000/xmlns/ या अपने नाम स्थान में निर्धारित नहीं है लाइन 21 की जगह है, लेकिन xsi में। तो आपको पहले पैरामीटर के रूप में (पूर्ण) xsi नामस्थान यूरी का उपयोग करना होगा।

और: आपको setAttributeNS() दो बार कॉल करने की आवश्यकता नहीं है: ऊपर दी गई एकल पंक्ति xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" और xsi:schemaLocation="http://xxx http://xxx/xxx.xsd" विशेषताएँ उत्पन्न करती है।

3

में मैं काफी यह पहली बार नहीं मिला तो मैं और अधिक विस्तार में मेरा उत्तर पोस्ट कर रहा हूँ । शायद किसी को यह सहायक लगता है।

// create DOM document 
$xml = new DomDocument('1.0', 'UTF-8'); 

// create root element 
$el = $xml->createElementNS('http://namespaceA/url/here/', 'rootelement'); 

// to be able to add new namespaces we must first add namespace 'xsi' 
// third parameter is important (use your main namespace with .xsd) 
$root->setAttributeNS(
    'http://www.w3.org/2001/XMLSchema-instance', 
    'xsi:schemaLocation', 
    'http://namespaceA/url/here/ http://namespaceA/xsdfile/here.xsd'); 

// add new namespace 
$el->setAttributeNS(
    'http://www.w3.org/2000/xmlns/', 
    'xmlns:namespaceB', 
    'http://namespaceB/url/here/'); 

// add root element to DOM 
$xml->appendChild($el); 

यह मेल संग्रह संदेश बहुत उपयोगी था: http://www.mail-archive.com/[email protected]/msg135362.html

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