php 7 xml DomDocument xpath修改节点值问题

时间:2018-06-27 08:05:14

标签: xml xpath domdocument php-7

我有以下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;

}

但不起作用...

可以建议如何修改它以达到结果吗?

0 个答案:

没有答案