【发布时间】:2019-02-18 12:31:42
【问题描述】:
这是代码:
$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>
【问题讨论】:
-
simplexml_load_file不返回字符串。你不能在上面使用str_replace。你可以先做一个str_replace,然后再将xml字符串加载到一个对象中。 -
你不能 (AFAIK)
str_replace()SimpleXMLElement($xml)。您应该使用原始源字符串。虽然不确定替换的目的。 -
@NigelRen 我们接收 XML 并拆分为 Header、Payment 和 Product,但 XML 格式错误,导致其余代码崩溃。所以我需要的只是一段代码,它将加载 XML 修改它并继续使用修改后的 XML(不将其保存到新的)
-
你能展示一下原始的 XML 是什么样的以及你需要如何拆分它吗?可能有一些方法可以维护正确的 XML 内容并且不需要任何其他处理。
-
@NigelRen 已添加 xml 示例(这只是示例)但通常 xml 已损坏,因为在新行上,不完全是在这里,它可能是其他地方......这就是为什么我想要一个检查器,所以它可以解决问题,如果会更多,我可以更新它并添加额外的修改