【问题标题】:XDocument load multiple XMLXDocument 加载多个 XML
【发布时间】: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”,这没有帮助。

标签: c# xml


【解决方案1】:

问题出在 SaveAs 方法上:

我做了 fileUpload.Saveas 而不是 file.SaveAs(folderPath + Path.GetFileName(file.FileName)); 其中文件是 HttpPostedFile

对不起 再见,谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多