0

XML をシリアライズしてファイルを作成しようとしています。xsd.exe を使用して XSD から自動生成されたオブジェクトからシリアル化しています。ファイルは処理され、問題なく作成されます。しかし、検証ツールに対して実行するたびに、Content Not Allowed In Prologというエラーが表示されます

私の推測では、xml 宣言の前に不正な形式の文字がいくつかあると思いますが、それらのように見えたり、そこにバイトが表示されたりすることはありません。XML ドキュメントをシリアル化して作成するコードは次のとおりです。

XmlSerializer ser = new XmlSerializer(typeof(ContinuityOfCareRecord));
            XmlWriterSettings settings = new XmlWriterSettings()
            {
                Encoding = Encoding.UTF8,
                ConformanceLevel = ConformanceLevel.Document,
                OmitXmlDeclaration = false,
                Indent = true,
                NewLineChars = "\n",
                CloseOutput = true,
                NewLineHandling = NewLineHandling.Replace,
                CheckCharacters = true
            };
using (XmlWriter myWriter = XmlWriter.Create(ms, settings))
            {
                myWriter.Flush();
                //myWriter.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"ccr.xsl\"");
                ser.Serialize(myWriter, myCCR);
            }

非常に単純に思えますが、出力 XML ファイルの先頭に不正な文字が含まれている場合、その文字を削除するにはどうすればよいでしょうか?

XML ドキュメントは次のように始まります。

<?xml version="1.0" encoding="utf-8"?> <ContinuityOfCareRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:astm-org:CCR"> <CCRDocumentObjectID>testccr</CCRDocumentObjectID> <Language>

正しいように見えますが、バリデーターはそれが好きではありません。私はこれについて一日中机の上で頭を悩ませてきたので、サンプルコードは非常に役に立ちます!

ありがとう

4

1 に答える 1

0

BOM の文字に問題があるように見えますが、この方法でコードを記述すると役立ちます。

using (XmlTextWriter myWriter = new XmlTextWriter(ms, new System.Text.UTF8Encoding(false)))
        {
            myWriter.Flush();
            //myWriter.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"ccr.xsl\"");
            ser.Serialize(myWriter, myCCR);
        }

これにより、BOM 文字が削除され、ファイルは BOM なしの UTF-8 でエンコードされます。

于 2013-03-01T23:45:54.020 に答える