加载XML文件,用“Y”替换所有“X”并继续使用文件

问题描述 投票:-1回答:1

这是代码:

        $xml = simplexml_load_file($candidateFile);

        if (!$xml) {
            $this->addCritical("ERROR: " . basename($candidateFile));
            return;
        }

        $ModifiedXml = simplexml_load_string( str_replace( "\n</DESIGNATION_PLU>", '</DESIGNATION_PLU>', $xml ) );

最后一行不起作用,我需要的是它将使用加载的XML“$ xml”替换一些东西并使用修改后的XML继续工作。

如果我不清楚,或者您需要更多信息,请告诉我。

更大的代码部分:

$xml = simplexml_load_file($candidateFile);

if (!$xml) {
    $this->addCritical("ERROR: " . basename($candidateFile));
    return;
}

// Before it will write to the new files I need to fix original XML 

$candidateFilenameParts = explode('_', basename($candidateFile));
$candidateFileDatetime = str_replace('.xml', '', $candidateFilenameParts[3]);

$headerFilename = "header_$candidateFileDatetime.csv";
$productFilename = "product_$candidateFileDatetime.csv";
$paymentFilename = "payment_$candidateFileDatetime.csv";
$this->addInfo("");

XML:看起来最初,XML中的值具有“\ n”之类的结尾

                <LIGNE>
                    <ID_TICKET>123</ID_TICKET>
                    <CODE_RAYON>123</CODE_RAYON>
                    <CODE_VENDEUR>123</CODE_VENDEUR>
                    <PLU>123</PLU>
                    <DESIGNATION_PLU>New 1234      
    ---> Next line  </DESIGNATION_PLU>
                    <CODE_EAN/>
                    <TYPE_ARTICLE>Pièce</TYPE_ARTICLE>
                    <QUANTITE_VENDUE>1</QUANTITE_VENDUE>
                    <UNITE_MESURE>123</UNITE_MESURE>
                    <PRIX_UNITAIRE_TTC>123</PRIX_UNITAIRE_TTC>
                    <MONTANT_VENTE_TTC>123</MONTANT_VENTE_TTC>
                    <SYMB_MONNAIE/>
                    <ANNULE>0</ANNULE>
                    <CODE_TVA>123</CODE_TVA>
                    <TVA_TAUX>123</TVA_TAUX>
                    <TYPE_TICKET>123</TYPE_TICKET>
                    <POURC_REMISE/>
                    <MONTANT_REMISE/>
                </LIGNE>
php xml simplexml
1个回答
1
投票

如果你有一个文件,如...

<DOC>
    <LIGNE>
        <ID_TICKET>123</ID_TICKET>
        <CODE_RAYON>123</CODE_RAYON>
        <CODE_VENDEUR>123</CODE_VENDEUR>
        <PLU>123</PLU>
        <DESIGNATION_PLU>New 1234
        </DESIGNATION_PLU>
        <CODE_EAN />
        <TYPE_ARTICLE>Pièce</TYPE_ARTICLE>
        <QUANTITE_VENDUE>1</QUANTITE_VENDUE>
        <UNITE_MESURE>123</UNITE_MESURE>
        <PRIX_UNITAIRE_TTC>123</PRIX_UNITAIRE_TTC>
        <MONTANT_VENTE_TTC>123</MONTANT_VENTE_TTC>
        <SYMB_MONNAIE />
        <ANNULE>0</ANNULE>
        <CODE_TVA>123</CODE_TVA>
        <TVA_TAUX>123</TVA_TAUX>
        <TYPE_TICKET>123</TYPE_TICKET>
        <POURC_REMISE />
        <MONTANT_REMISE />
    </LIGNE>
</DOC>

使用trim()更新元素以删除任何周围空间会更容易,因为这将迎合具有相同问题的任何其他内容...

$xml = simplexml_load_file($candidateFile);
function trimXML( SimpleXMLElement $element )  {
    foreach ( $element->children() as $node )    {
        if ( $node->count() > 0 )   {
            trimXML($node);
        }
        else    {
            $node[0] = trim((string)$node);
        }
    }
}
trimXML($xml);
echo $xml->LIGNE[0]->DESIGNATION_PLU.".".PHP_EOL;

给...

New 1234.
© www.soinside.com 2019 - 2024. All rights reserved.