如何在xml文档中添加封闭标记?

时间:2015-05-18 10:51:54

标签: c# .net xml

我有下一个问题:我创建了下载器,它下载了xml文件,但在一个文档中有问题,在文件中没有结束标记。例如:

<?xml version="1.0"?>
<rows xmlns:fo="http://www.w3.org/1999/XSL/Format">
<row StateID="AK">

我有下一个代码:

public void SaveFiles(SftpClient sftp, string DirectoryName, string PathToFile)
{
    foreach (Renci.SshNet.Sftp.SftpFile ftpfile in sftp.ListDirectory("." + DirectoryName))
    {
        DateTime downloadTime = ftpfile.LastWriteTime;
        string newFileName = ftpfile.Name;
        bool checkFile = check(PathToFile, newFileName, downloadTime);
        if (checkFile == true)
        {
            FileStream fs = new FileStream(PathToFile + "\\" + ftpfile.Name, FileMode.Create);
            sftp.DownloadFile(ftpfile.FullName, fs);
            fs.Close();
            File.SetLastWriteTime(PathToFile + "\\" + ftpfile.Name, downloadTime); 

        }
        else
        {
            continue;
        }

    }
}

1 个答案:

答案 0 :(得分:2)

包含未关闭标记的文档根本不是XML。正如其他人在评论中所建议的那样,理想情况下,修复此问题的工作由生成文档的一方完成。

关于原始问题,一般来说,检测未关闭的标签并不是一项简单的任务。我建议尝试HtmlAgilityPack(HAP)。它具有内置功能,可以自动关闭未关闭的标签(在开始标签之后立即添加关闭标签)。

<强> example using HAP :

using HtmlAgilityPack;

......

var xml = @"<?xml version=""1.0""?>
<rows xmlns:fo=""http://www.w3.org/1999/XSL/Format"">
<row StateID=""AK"">";
var doc = new HtmlDocument();
doc.LoadHtml(xml);
Console.WriteLine(doc.DocumentNode.OuterHtml);

输出

<?xml version="1.0"?>
<rows xmlns:fo="http://www.w3.org/1999/XSL/Format">
<row stateid="AK"></row></rows>