【发布时间】:2018-04-29 17:12:13
【问题描述】:
我有一个 ASP.Net 网络表单应用程序。
我在页面中有一个文件上传允许多个文件。
在 foreach 循环中,我尝试读取用户上传到文件夹的所有 XML。
如果我阅读文档,就会出现问题。我只得到选择中的第一个 XML。我在 foreach 中简单地使用了XDocument.load(filename)。我做错了什么?
我在按钮点击事件中触发该循环
protected void btnSaveDatabase_Click(object sender, EventArgs e)
{ //hiddenfield in page have name of xml in folder
var filesUploaded = hfXMLuploaded.Value.ToString().Split('-');
try
{
foreach (var file in filesUploaded)
{
string filename = Server.MapPath("~/SFA_XML_Upload/" + file);
var doc = XDocument.Load(filename);
Response.Write(doc.ToString()); // for testing
//SaveDataBaseMyTable(ReadMyTable(doc, filename));
}
我的阅读方法:
protected List<SFA_ORDCLI> ReadOrdcli(XDocument doc, string filename)
{
var ordcli = doc.Descendants("table")
.Where(i => (string)i.Attribute("name") == "ordcli")
.Descendants("row")
.Select(e => e.Elements());
List<SFA_ORDCLI> sfaOrdcliList = new List<SFA_ORDCLI>();
foreach (var row in ordcli)
{
SFA_ORDCLI sfaOrdcli = new SFA_ORDCLI();
sfaOrdcli.NomeFileXML = Path.GetFileNameWithoutExtension(filename);
foreach (var field in row)
{
var name = (string)field.Attribute("name");
switch (name)
{
case "RolCodEst"://key
sfaOrdcli.RolCodEst = (string)field;
break;
...other fields
}
}
if (sfaOrdcli != null) sfaOrdcliList.Add(sfaOrdcli);
}
return sfaOrdcliList;
}
在调试中我看到加载方法接收文件名'name.xml' 但响应会在第一次读取 xml 时打印两次。
【问题讨论】:
-
您是否尝试调试代码以查看 filesUploaded 是否包含您期望的文件名列表?
-
我们真的需要看到minimal reproducible example 才能正确回答您的问题。但是看起来您正在使用
Response.Write()将多个XML 文档写入响应流,但是格式良好的XML 文档必须只有一个root element。也许接收客户端只解析第一个而忽略其余的? -
如果我一次选择一个文件,则在文件上传中运行良好...代码读取并将 xml 保存在表中。但是如果我选择更多文件,我有主键异常,因为返回文件夹中的第一个 xml
-
我更新了问题中的代码。希望这有帮助。我要疯了
-
这需要调试,我们不能为你做。清楚“接收
name.xml”,这没有帮助。