【发布时间】:2021-08-09 23:14:12
【问题描述】:
我正在创建一个允许加载 XML 文件的功能,但在加载它们之前我需要验证它们的内容,我不知道这是否是正确的方法,但我正在考虑类似首先阅读 XML 以查看它的内容,然后使用我存储在数据库表中的数据对其进行验证。
目前我开发的是使用 AJAX 和 PHP 加载 XML 文件,如下所示。
这是我用来加载 XML 文件的表单的一部分
<form action="" enctype="multipart/form-data">
<div class="form-group row">
<label for="fileToUpload" class="col-sm-3 col-form-label"> File XML:</label>
<div class="col-sm-8">
<input type="file" name="fileToUpload" id="XmlToUpload" class="btn" accept=".xml" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="button" id="upload" class="btn btn-success">Upload Documents</button>
</div>
</form>
以下是我用来加载文档并验证其格式的 JQuery 函数
$(document).ready(function(){
$("#upload").on("click", function(){
const ArchivoXml = $("#XmlToUpload").prop('files')[0];
if (ArchivoXml.type !== 'text/xml') {
$('#XmlToUpload').val('');
//$('#pdfToUpload').val('');
alert('Please select the files with the correct format');
return;
}
const datosForm = new FormData;
datosForm.append("XmlToUpload", ArchivoXml);
const filePath="server.php"
//console.log(ArchivoXml);
$.ajax({
type:'POST',
cache: false,
contentType: false,
processData: false,
data: datosForm,
url:filePath
}).done(function(data){
alert(data)
}).fail(function(){
alert('The file could not be loaded')
});
});
});
以下是我指明存储路径的 PHP 代码
server.php
<?php
if(isset($_FILES["XmlToUpload"])){
$archivo = $_FILES["XmlToUpload"]["name"];
$ruta ="XML/";
if(move_uploaded_file($_FILES["XmlToUpload"]["tmp_name"],$ruta.$archivo)){
echo "Successfully uploaded";
}else{
echo "Error";
}
}else {
echo "A file was not selected";
}
?>
正如我在问题开头提到的,我需要验证 XML 的内容,并使用在数据库表中找到的信息进行验证。
XML 文件的结构将包含以下信息:
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Voucher Version="3.3" Total="45264.13">
<cfdi:Issuer Rfc="ABC123456AB1" Name="JOHN DOE"/>
<cfdi:Concepts>
<cfdi:Concept UnitValue="93.80">
</cfdi:Concept>
</cfdi:Concepts>
<cfdi:Plugin>
<tfd:Digital Version="1.1" />
</cfdi:Plugin>
</cfdi:Voucher>
我有兴趣验证的数据是 Total="45264.13" 和 Rfc="ABC123456AB1"
除此之外,我开始了在 SQLServer 中创建存储过程的任务,以从数据库中获取信息,从而与 XML 数据和数据库中表的字段值进行比较。
USE [dbtest]
GO
/****** Object: StoredProcedure [dbo].[sptest]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sptest]
AS
BEGIN
Select VTB.RFC as 'RFC',
LRC.QTY as 'QTY',
PL.PRICE as 'Price',
(PL.PRICE *LRC.QTY) * 1.16 as 'Total'
from PACKING RC
inner join VTABLE VTB on VTB.COLUMN = RC.INVOICE
inner join TRANS LRC on (LRC.PACKING = RC.RECID)
inner join PURCH PL on (PL.NUMBER =LRC.NUM and PL.PURCH =RC.PURCH)
END
我希望有人可以指导我使用我正在创建的这个功能。
更新:
为了提供更快的验证以使数据与 XML 的内容相同,现在我决定在前面获取它们,也就是说,在我加载的同一视图中显示它们XML如下:
<div class="form-group row">
<label for="lblNombreVisita" class="col-sm-3 col-form-label">RFC:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="txtRfc" disabled>
</div>
</div>
<div class="form-group row">
<label for="lblNombreVisita" class="col-sm-3 col-form-label">Total:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="txtTotal" disabled>
</div>
</div>
<form action="" enctype="multipart/form-data">
<div class="form-group row">
<label for="fileToUpload" class="col-sm-3 col-form-label"> Archivo XML:</label>
<div class="col-sm-8">
<input type="file" name="fileToUpload" id="XmlToUpload" class="btn" accept=".xml" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
<button type="button" id="upload" class="btn btn-success">Subir Documentos</button>
</div>
</form>
同样,如果有人发现如何验证它们与数据库中找到的值相等,那么它也是有效的,或者如果它们可以直接使用我在文本字段中获得的值进行验证我刚刚加了,也是有效的。
【问题讨论】:
-
XML 示例无效。它缺少命名空间定义。
标签: javascript php xml