将名称空间添加到XML

时间:2014-11-04 09:14:12

标签: php xml domdocument

我正在使用PHP为其中一个客户端创建XML响应,其中包含名称空间URL。我期待输出如下,

<?xml version="1.0" encoding="UTF-8"?>
<ns3:userResponse xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.w3.org/2001/XMLSchema">
   <Content>
      <field1>fieldvalue1</field1>
   </Content>
</ns3:userResponse>

但是使用以下代码

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

// create root node
$root = $doc->createElementNS('http://www.w3.org/2001/XMLSchema-instance', 'ns3:userResponse');
$root = $doc->appendChild($root);

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

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


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

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


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

echo $xml_string;

样本: 演示在这里,http://codepad.org/11W9dLU9

问题在于,第三个属性是setAttributeNS PHP函数的必​​需属性。所以,我得到了输出,

<?xml version="1.0" encoding="UTF-8"?>
<ns3:userResponse xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.w3.org/2001/XMLSchema" ns3:schemaLocation="" ns2:schemaLocation="">
   <Content>
      <field1>fieldvalue1</field1>
   </Content>
</ns3:userResponse>

那么,无论如何要移除那些带有空值的ns3:schemaLocationns2:schemaLocation?我google了很多,但无法找到任何有用的答案。

对此的任何想法都会如此之大。请帮忙。

1 个答案:

答案 0 :(得分:-1)

您可以创建此属性:

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

删除这些行,它们将被删除。

如果你想在代码中添加一些xmlns而不使用它:

$attr_ns = $doc->createAttributeNS( 'http://www.w3.org/2001/XMLSchema', 'ns2:attr' );

阅读此评论:http://php.net/manual/pl/domdocument.createattributens.php#98210