Как удалить первую строку XML файла с помощью XMLDocument в С#?
Я читаю XML файл на С#, используя XMLDocument
. Мой код выглядит следующим образом:
XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);
Первая строка моего документа XML
<?xml version="1.0" encoding="UTF-8"?>
Мне нужно удалить эту строку. Как мне?
Ответы
Ответ 1
Я не понимаю, почему вы хотите удалить это. Но если это необходимо, вы можете попробовать следующее:
XmlDocument doc = new XmlDocument();
doc.Load("something");
foreach (XmlNode node in doc)
{
if (node.NodeType == XmlNodeType.XmlDeclaration)
{
doc.RemoveChild(node);
}
}
или с LINQ:
var declarations = doc.ChildNodes.OfType<XmlNode>()
.Where(x => x.NodeType == XmlNodeType.XmlDeclaration)
.ToList();
declarations.ForEach(x => doc.RemoveChild(x));
Ответ 2
В качестве альтернативы вы можете использовать это:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
xmlDoc.RemoveChild(xmlDoc.FirstChild);
Ответ 3
Мне нужно было иметь сериализованную строку XML без заголовка объявления, поэтому для меня работал следующий код.
StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings {
Indent = true,
OmitXmlDeclaration = true, // this makes the trick :)
IndentChars = " ",
NewLineChars = "\n",
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
doc.Save(writer);
}
return sb.ToString();
Ответ 4
Я понимаю необходимость устранения XML-декларации; Я работаю над script, который изменяет содержимое приложения preferences.xml
, и приложение не читает файл должным образом, если объявление есть (не знаю, почему разработчики решили опустить XML-объявление).
Вместо того, чтобы взаимодействовать с XML больше, я просто создал метод removeXMLdeclaration()
, который читает XML файл и удаляет первую строку, а затем перезаписывает его просто с помощью streamreaders/writers. Он молниеносно и отлично работает! Я просто вызываю метод после того, как выполнил все мои изменения XML, чтобы очистить файл раз и навсегда.
Вот код:
public void removeXMLdeclaration()
{
try
{
//Grab file
StreamReader sr = new StreamReader(xmlPath);
//Read first line and do nothing (i.e. eliminate XML declaration)
sr.ReadLine();
string body = null;
string line = sr.ReadLine();
while(line != null) // read file into body string
{
body += line + "\n";
line = sr.ReadLine();
}
sr.Close(); //close file
//Write all of the "body" to the same text file
System.IO.File.WriteAllText(xmlPath, body);
}
catch (Exception e3)
{
MessageBox.Show(e3.Message);
}
}
Ответ 5
Существует другой способ закрыть этот файл, используя поток файлов.
public void xyz ()
{
FileStream file = new FileStream(xmlfilepath, FileMode.Open, FileAccess.Read);
XmlDocument doc = new XmlDocument();
doc.load(xmlfilepath);
// do whatever you want to do with xml file
//then close it by
file.close();
File.Delete(xmlfilepath);
}