【发布时间】:2022-08-02 19:50:27
【问题描述】:
我正在寻找一种允许加载 XML 文件的解决方案,其中名为 Total 的值允许高于或低于实际值 1 美分的差异,对于这个解决方案,我从 XML 中获取 Total 的值文件如下。
$xml = new SimpleXMlElement( $_FILES[\'XmlToUpload\'][\'tmp_name\'], 0, true );
$total = (float)$xml[\'Total\'];
为了详细解释我想要实现的目标,我将放置以下示例,当读取 XML 文件的 Total 节点时,这将作为以下 Total= \"9840.00\" 的值,加载 XML 文件时我想要允许的是它允许总计有大约 1 美分的差异,也就是说,即使 XML 文件的总计值为 Total=\"9839.99\" 或 Total=\"9840.01\",它也允许加载文件。
XML 文件按如下方式加载:
$fileXML = $_FILES[\'XmlToUpload\'][\'name\'];
$pathXML = \"//LOCATION/XML/\";
$filepathXML = $pathXML.$fileXML;
if(move_uploaded_file( $_FILES[\'XmlToUpload\'][\'tmp_name\'], $pathXML . $fileXML)){
echo \'Success Upload File\';
}
我希望有人能给我一些关于如何进行此验证的指导。
更新 1:
我添加了一个简短且具有代表性的 XML 文件示例,其中需要验证的 Total 节点位于
<cfdi:Voucher xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
Certificated=\"m4gfzi9yNXuC0A=\"
Condition=\"002\"
Date=\"2021-06-29T16:02:16\"
Number=\"4938\"
Payment=\"23\"
NoCertificated=\"404627114\"
Total=\"9840.00\"
Version=\"3.3\">
</cfdi:Voucher>
更新 2:
我试图根据他们给我的答案之一对我的代码进行修改,但我不存在,这可能是我遇到的一些额外错误,我尝试添加两个新变量,一个添加到总计金额\"0.01\"另一个变量减去\"0.01\".
变量声明如下:
$totalMgS = $total + \"0.01\";
$totalMgI = $total - \"0.01\";
重要的是要明确我之前在问题开头提到的$total,我用它来读取XML文件。
基于其中一个响应,我在 XML 文件的加载部分创建了以下验证:
if($total <= $totalMgS && $total >= $totalMgI){
if(move_uploaded_file( $_FILES[\'XmlToUpload\'][\'tmp_name\'], $pathXML . $fileXML)){
echo \'Success Upload File\';
}
}else{
echo \"It doesn\'t fit!\";
当我测试一个 XML 文件时,$total 的差异为0.01,该文件未加载,并向我抛出It doesn\'t fit! 的消息。
我需要对验证进行任何更改吗?
-
比“实际价值”多还是少一分钱?您是否希望允许整数的 0.01 范围内的任何值,或者该值是否需要在 XML 文件中某个已知值或不同值的 0.01 范围内?
-
你可以编辑你的问题并添加一个简短的,有代表性的
$xml的样本? -
@EMF 在要上传的 XML 文件中找到的实际值多 1 美分或 1 美分
-
@JackFleeting 我刚刚使用您请求的 XML 文件对我的问题进行了更新
-
@ user11804298根据您的回答,实际值将始终在实际值的一分之内,因为它们是完全相同的数字。如果 Total = 1500.47,则它在 1500.47 的 1 美分以内。