1

C#でいくつかのデータからxmlをエクスポートしようとしています

XDocument doc = XDocument.Parse(xml);

XML を保存した後、XML に含まれていることがわかりました。

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

まったく入力しなかったため、次のような問題が発生しました。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="..\..\dco.xsl"?>
<S>
  <B>
  </B>
</S>

最初の行を表示したくないのですが、何かアイデアはありますか? ご回答ありがとうございます。

4

3 に答える 3

2

私の理解が正しければ、ヘッダーのない XML ファイルが必要です。この回答を見てください。

XmlWriter基本的に、とXmlWriterSettingsクラスを初期化してから を呼び出す必要がありますdoc.Save(writer)

于 2012-07-03T08:27:17.733 に答える
2

その PI (処理命令) は、xml ファイルの処理中に使用される必要かつ含まれている重要な情報です。

xmlファイルの書き込み中にこれを試してください:

XmlWriter w;
w.Settings = new XmlWriterSettings();
w.Settings.ConformanceLevel = ConformanceLevel.Fragment;
w.Settings.OmitXmlDeclaration = true;

オブジェクトのシリアライズ時の XML 処理命令の省略

xml ファイルからのバージョンの削除

http://en.wikipedia.org/wiki/Processing_Instruction

于 2012-07-03T08:30:20.247 に答える
2

あなたが言っているのは、上記の結果に重複した宣言が含まれているように、文字列で解析する「AFTER」です。

応答をどのように保存しているのかわかりませんが、同様の結果を生成するサンプル アプリケーションを次に示します。

XDocument doc = XDocument.Parse("<?xml-stylesheet type=\"text/xsl\" href=\"dco.xsl\"?><S><B></B></S>");
            doc.Save(Console.OpenStandardOutput());

結果を生成します。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="dco.xsl"?>
<S>
  <B></B>
</S>

あなたが抱えている問題はどれですか。保存する前に、xml 宣言を削除する必要があります。これは、xml 出力を保存するときに xml ライターを使用して行うことができます。以下は、宣言なしで新しいドキュメントを作成するための拡張メソッドを備えたサンプル アプリケーションです。

class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Parse("<?xml-stylesheet type=\"text/xsl\" href=\"dco.xsl\"?><S><B></B></S>");
            doc.SaveWithoutDeclaration(Console.OpenStandardOutput());
            Console.ReadKey();
        }


    }

    internal static class Extensions
    {
        public static void SaveWithoutDeclaration(this XDocument doc, string FileName)
        {
            using(var fs = new StreamWriter(FileName))
            {
                fs.Write(doc.ToString());
            }
        }

        public static void SaveWithoutDeclaration(this XDocument doc, Stream Stream)
        {
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(doc.ToString());
            Stream.Write(bytes, 0, bytes.Length);
        }
    }
于 2012-07-03T08:54:20.893 に答える