SimpleXML префикс корневого узла php - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь создать XML с помощью php: это настоящий XML

<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://microsoft.com/wsdl/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versione="FPA12" >
 <FatturaElettronicaHeader>
  <DatiTrasmissione>
   <IdTrasmittente>
    <IdPaese>IT</IdPaese>
    <IdCodice>01234567890</IdCodice>
   </IdTrasmittente>
   <ProgressivoInvio>00001</ProgressivoInvio>
   <FormatoTrasmissione>FPA12</FormatoTrasmissione>
   <CodiceDestinatario>AAAAAA</CodiceDestinatario>
  </DatiTrasmissione>

Мой код:

$xml = new SimpleXMLElement('<p:FatturazioneElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://microsoft.com/wsdl/types/" />');
$xml->addAttribute("versione","FPA12");
$xml->addAttribute("xmlns:xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
$FatturaElettronicaHeader = $xml->addChild('FatturaElettronicaHeader');
$DatiTrasmissione=$FatturaElettronicaHeader->addChild('DatiTrasmissione');
$IdTrasmittente=$DatiTrasmissione->addChild('IdTrasmittente');
$IdTrasmittente->addChild('IdPaese', 'IT');
$IdTrasmittente->addChild('IdCodice','01234567890');

$ProgressivoInvio=$DatiTrasmissione->addChild('ProgressivoInvio', '00001');
$FormatoTrasmissione=$DatiTrasmissione->addChild('DatiTrasmissione', 'FPA12');
$CodiceDestinatario=$DatiTrasmissione->addChild('CodiceDestinatario', 'AAAAAA');

в моем XML-файле у меня есть префикс p: в каждом теге.

мне нужно иметь префикс p в корневом узле (p: FatturaElettronica).

Я не знаю, как это сделать.

<p:FatturazioneElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://microsoft.com/wsdl/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versione="FPA12">
 <p:FatturaElettronicaHeader>
   <p:DatiTrasmissione>
    <p:IdTrasmittente>
     <p:IdPaese>IT</p:IdPaese>
     <p:IdCodice>01234567890</p:IdCodice>
    </p:IdTrasmittente>
    <p:ProgressivoInvio>00001</p:ProgressivoInvio>
   <p:DatiTrasmissione>FPA12</p:DatiTrasmissione>
   <p:CodiceDestinatario>AAAAAA</p:CodiceDestinatario>
 </p:DatiTrasmissione>

1 Ответ

0 голосов
/ 01 октября 2018

Проблема с SimpleXML заключается в том, что если вы не указываете пространство имен элемента при его добавлении, оно предполагает пространство имен родительского узла (следовательно, p:).Чтобы добавить его в пространство имен по умолчанию (то есть без префикса), вам нужно изменить несколько вещей.

Сначала добавьте объявление пространства имен по умолчанию в корневой элемент ...

$xml = new SimpleXMLElement('<p:FatturazioneElettronica 
      xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
      xmlns:p="http://microsoft.com/wsdl/types/" 
      xmlns="http://dummy.com" />');

Я только что добавил как xmlns="http://dummy.com" ближе к концу.

Затем, при добавлении первого элемента в документ, добавьте это во вновь определенное пространство имен по умолчанию ...

$FatturaElettronicaHeader = $xml->addChild('FatturaElettronicaHeader', 
            null, 'http://dummy.com');
...