我有下一个问题:我创建了下载器,它下载了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;
}
}
}
答案 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>