如何省略XML名称空间声明?

时间:2018-07-03 19:24:56

标签: php xml domdocument xml-namespaces

我正在DomDocument上构建XML。我需要输出此标头:

<p:FatturaElettronica versione="FPR12" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">

为了达到这个结果,我编写了以下代码:

$dom  = new \DomDocument("1.0", "UTF-8");
        $init = $dom->createElementNS('http://www.example.com/XFoo', 'p:FatturaElettronica');
        $init->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
        $init->setAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation', 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd');
        $version = "FPR12";
        $init->appendChild($dom->createAttribute('versione'))->appendChild($dom->createTextNode($version));

但是输出是这样的:

    <p:FatturaElettronica xmlns:p="http://www.example.com/XFoo"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd
/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione
/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd" 
versione="FPR12">

我在哪里错了?

1 个答案:

答案 0 :(得分:1)

  

我在哪里错了?

您的目标不对。如果使用命名空间前缀,则必须声明。  您目标中的XML使用名称空间前缀,但从不声明它们。这将使XML不会namespace-well-formed

您生成的输出 是命名空间格式正确的,并且是 产生的结果。