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 回答