2015-05-18 2 views
-2

У меня есть следующая проблема: я создал загрузчик, который загружает XML-документы, но в одном документе проблема, в теге not not document. Например:Как добавить закрытый тег в документ 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

Это поможет, если вы показали код, который создает XML. Если вы используете встроенные XML-классы ('XmlDocument' или' XDocument'), такие вещи не должны происходить. Я говорю это, предполагая, что вы также создаете XML. Если какая-либо третья сторона создает XML, скажите им, что им нужно создать правильный XML. –

+1

Почему документ недействителен для начала? У вас есть контроль над источником? Было бы гораздо лучше исправить генерации файла, чем позже. –

+4

Я бы кричал на то, кто вы загружаете XML. Вы не можете легко исправить это, поскольку это недопустимый XML и неоднозначно, как он должен быть исправлен (как вы могли бы достоверно сказать, где что-то вроде 'rows' * should * end?) –

ответ

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> 
+1

Спасибо за ваш ответ. Это помогло мне – Yura

Смежные вопросы