我有以下xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>01234567890</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>00001</ProgressivoInvio>
<FormatoTrasmissione>FPR12</FormatoTrasmissione>
<CodiceDestinatario>0000000</CodiceDestinatario>
<PECDestinatario>betagamma@pec.it</PECDestinatario>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>01234567890</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>SOCIETA' ALPHA SRL</Denominazione>
</Anagrafica>
<RegimeFiscale>RF01</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>VIALE ROMA 543</Indirizzo>
<CAP>07100</CAP>
<Comune>SASSARI</Comune>
<Provincia>SS</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CedentePrestatore>
</FatturaElettronicaHeader>
,我需要修改许多节点值。
如果我使用simplexml_load_file,则可以执行以下操作:
$EI=simplexml_load_file("it_e-invoice.xml");
foreach( $EI->xpath("//DatiTrasmissione") as $t ) {
$t->IdTrasmittente->IdPaese = $sCountryID;
$t->IdTrasmittente->IdCodice= $sVATNumber;
$t->ProgressivoInvio = $ProgressivoInvio;
$t->CodiceDestinatario = $res['SDI'];
$t->PECDestinatario = $PEC;
}
由于我需要进行更多更改,因此这次我想使用DomDocument,
但是我看来,唯一的解决方案是以这种方式更改每个节点:
$EI = new DOMDocument();
$EI->formatOutput = true;
$EI->load('it_e-invoice.xml');
$xp = new DOMXPath($EI);
$EI->getElementsByTagName("IdPaese")->item(0)->nodeValue = 'FR';
$EI->getElementsByTagName("IdPaese")->item(1)->nodeValue = 'DE';
虽然我想使用更好的解决方案,但肯定存在:
我尝试使用DOMXPath
...
$EI = new DOMDocument();
$EI->formatOutput = true;
$EI->load('it_e-invoice.xml');
$xp = new DOMXPath($EI);
foreach($xp->query('//DatiTrasmissione') as $node)
{
$node->IdTrasmittente->IdPaese->nodeValue=$sCountryID;
$node->IdTrasmittente->IdCodice->nodeValue= $sVATNumber;
$node->ProgressivoInvio->nodeValue = $ProgressivoInvio;
$node->CodiceDestinatario->nodeValue = $res['SDI'];
$node->PECDestinatario->nodeValue = $PEC;
}
但不起作用...
可以建议如何修改它以达到结果吗?