2

以下是我试图在我的 XML 中创建的节点 -

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

代码适用于identifierversion属性,但无法使用命名空间生成它xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"

从这里尝试了这段代码,但无法成功:(

$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";

键盘链接 - 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 link] 但仍然没有运气:(。

错误-

致命错误:在第 20 行调用未定义的方法 DOMElement::createAttributeNS()

4

1 回答 1

6

尝试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

于 2013-09-04T07:29:41.183 回答