2013-09-04 4 views
2

Ниже узел Я пытаюсь создать в моей XML -Добавить атрибут пространства имен XML узла в PHP

<?xml version="1.0" standalone="no" ?> 
<manifest identifier="com.scorm.golfsamples.contentpackaging.multioscosinglefile.20043rd" 
      version="1" 
      xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_v1p3" 
      xmlns:adlseq="http://www.adlnet.org/xsd/adlseq_v1p3" 
      xmlns:adlnav="http://www.adlnet.org/xsd/adlnav_v1p3" 
      xmlns:imsss="http://www.imsglobal.org/xsd/imsss" 
      xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd 
           http://www.adlnet.org/xsd/adlcp_v1p3 adlcp_v1p3.xsd 
           http://www.adlnet.org/xsd/adlseq_v1p3 adlseq_v1p3.xsd 
           http://www.adlnet.org/xsd/adlnav_v1p3 adlnav_v1p3.xsd 
           http://www.imsglobal.org/xsd/imsss imsss_v1p0.xsd"> 

код работает отлично для identifier и version атрибута, но не в состоянии создать его с пространством имен, как xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"

Попробовал этот код из here, но не в состоянии сделать это :(

$doc = new DOMDocument('1.0'); 
$doc->loadXML($source); 

// (1) We just create a "namespace'd" attribute without appending it to any element. 
$attr_ns = $doc->createAttributeNS('{namespace_uri_here}', 'example:attr'); 

print $doc->saveXML() . "\n"; 

Codepad Link - http://codepad.org/uLJc4hpP

Полный код -

//creating an XML document 
    $dom = new DOMDocument('1.0'); 
    $dom->xmlStandalone = false; 

    //create element manifest 
    $manfiestNode = $dom->createElement('manifest',""); 

    //create attribute identifier 
    $manfiestNodeAttr = $dom->createAttribute('identifier'); 

    //value for the manifest node identifier value 
    $date = new DateTime(); 
    $manfiestNodeAttr->value = 'course_'.date_format($date,'U'); 

    //append attribute to the manifest element 
    $manfiestNode->appendChild($manfiestNodeAttr); 

    //create attribute with an associated namespace 
    $nodeAttr = $manfiestNode->createAttributeNS('{namespace_uri_here}', 'example:attr'); 

    //append namespace to the manifest element 
    $nodeAttr->appendChild($manfiestNode); 

    //append manifest element to the document 
    $dom->appendChild($manfiestNode); 

    var_dump($dom->saveXML()); 

Позвольте мне знать, что я концептуально делаю неправильно и как я мог бы сделать его работу.

Я пытался путем изменения $manfiestNode к $dom в строке 20 [codepad ссылка], но до сих пор не повезло :(.

error-

Fatal error: Call to undefined method DOMElement::createAttributeNS() on line 20

ответ

5

Попробуйте с createAttribute как следующий

$dom = new DOMDocument('1.0','UTF-8'); 

// root manifest 
$root = $dom->appendChild($dom->createElement('manifest')); 

// identifier 
$date = new DateTime(); 
$manfiestNodeAttr_value = 'course_'.date_format($date,'U'); 

$root->appendChild($dom->createAttribute('identifier'))->appendChild($dom->createTextNode($manfiestNodeAttr_value)); 

// version 
$version = 1; 

$root->appendChild($dom->createAttribute('version'))->appendChild($dom->createTextNode($version)); 

// xmlns:xsi 
$root->appendChild($dom->createAttribute('xmlns:xsi'))->appendChild($dom->createTextNode("http://www.w3.org/2001/XMLSchema-instance")); 

print_r($dom->saveXML()); 

Демо-версия:http://codepad.org/zgug0Gl3

+0

Мой вопрос об генерации 'xmlns: xsi' этих типов атрибутов, версии и идентификатора успешно создан из кода выше – swapnesh

+0

@swapnesh Но вы можете создать' xmlns' с 'createAttribute'? – Bora

+0

Да, я пробовал этот путь '$ dom-> createAttribute ('xmlns: xsi')', и он работает :) только вещь - это действительно чистый способ генерации, как это ... я знаю, если у вас есть мысли об этом +1 :) – swapnesh

Смежные вопросы