28

を使用して C# で XML ファイルを読み込んでいますXMLDocument。私のコードは次のようになります。

XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);

私のXML文書の最初の行は

<?xml version="1.0" encoding="UTF-8"?>

この行を削除する必要があります。どうすればいいですか?

4

6 に答える 6

34

なぜそれを削除したいのかわかりません。ただし、必要な場合は、これを試すことができます。

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));
于 2013-04-16T12:24:58.160 に答える
1

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);
        }

    }
于 2014-04-09T17:52:56.710 に答える
0

このファイルを閉じるには、ファイル ストリームを使用する別の方法があります。

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);
}
于 2014-10-17T18:07:21.050 に答える