を使用して C# で XML ファイルを読み込んでいますXMLDocument
。私のコードは次のようになります。
XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);
私のXML文書の最初の行は
<?xml version="1.0" encoding="UTF-8"?>
この行を削除する必要があります。どうすればいいですか?
なぜそれを削除したいのかわかりません。ただし、必要な場合は、これを試すことができます。
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));
XML 宣言を削除する必要があることは理解しています。アプリケーションの内容を変更するスクリプトに取り組んでいpreferences.xml
ますが、宣言があるとアプリケーションがファイルを正しく読み取れません (開発者が XML 宣言を省略した理由は不明です)。
もう XML をいじる代わりにremoveXMLdeclaration()
、XML ファイルを読み取って最初の行を削除し、ストリームリーダー/ライターを使用して簡単に書き直すメソッドを作成しました。それは電光石火のように速く、うまく機能します!すべての 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);
}
}
このファイルを閉じるには、ファイル ストリームを使用する別の方法があります。
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);
}