2012-01-31 92 views
0

我对XML,命名空间和PHP DOM有一些问题。使用php生成xml命名空间

这是我的输出,我应该得到:

<cd:Document xmlns="http://www.zbs-giz.si/Schemas/2006/ZBSxml/2.2" xmlns:cd="http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0/ZbsCreaDoc.xsd"> 
<cd:Data> 
    <cd:DataFormat> 
     <cd:MimeType>text/xml</cd:MimeType> 
    </cd:DataFormat> 
    <cd:Content> 
     <cd:EmbeddedData> 

,这是我的PHP代码

$root = $doc->appendChild($doc->createElementNS('http://www.zbs-giz.si/Schemas/2006/ZBSxml/2.2', 'cd:Document')); 
$root->setAttributeNS('http://www.zbs-giz.si/Schemas/2006/ZBSxml/2.2', 'cd', 'http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0'); 
$root->setAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation', 'http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0/ZbsCreaDoc.xsd'); 

任何想法如何解决这个问题?

回答

3
<?php 
$doc = new DOMDocument(); 
$doc->formatOutput = true; 
//set root element to correct cd prefix _and_ namespace: 
$root = $doc->appendChild(
     $doc->createElementNS(
     $cd = 'http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0', 
     'cd:Document')); 
//this is the bit of obscure magic: it will set the default namespace 
$doc->createAttributeNS(
     'http://www.zbs-giz.si/Schemas/2006/ZBSxml/2.2', 
     'xmlns'); 
//now continue as normal 
$root->setAttributeNS(
     'http://www.w3.org/2001/XMLSchema-instance', 
     'xsi:schemaLocation', 
     'http://www.crea.si/Schemas/2004/Document/ZBSxml/2.0/ZbsCreaDoc.xsd'); 
$data = $root->appendChild($doc->createElementNS($cd,'cd:Data')); 
$dataformat = $data->appendChild($doc->createElementNS($cd,'cd:DataFormat')); 
$dataformat->appendChild($doc->createElementNS($cd,'cd:MimeType','text/xml')); 
$content = $data->appendChild($doc->createElementNS($cd,'cd:Content'));