给定编码中的xml无效字符

时间:2010-03-08 11:26:32

标签: c# xml xhtml xsd

我正在尝试使用xsd验证我的xml,并在给定的编码中获取错误无效字符。我用来验证的代码如下:

private static void ValidatingProcess(string XSDPath, string xml)
    {
        MemoryStream stream =
            new MemoryStream(ASCIIEncoding.Default.GetBytes(xml));

        using (StreamReader SR = new StreamReader(XSDPath))
        {
            XmlSchema Schema = XmlSchema.Read(SR, ReaderSettings_ValidationEventHandler);
            XmlReaderSettings ReaderSettings = new XmlReaderSettings();
            ReaderSettings.ValidationType = ValidationType.Schema;
            ReaderSettings.Schemas.Add(Schema);

            ReaderSettings.ValidationEventHandler += ReaderSettings_ValidationEventHandler;
            XmlReader objXmlReader = XmlReader.Create(stream, ReaderSettings);

            bool notDone = true;
            while (notDone)
            {
                notDone = objXmlReader.Read();
            }
        }
    }

它在诸如é之类的字符上出错。所以我猜测这是UTF-8被指定为编码或我使用ASCIIEncoding在上面的代码中创建MemoryStream的方式。我已经尝试将xsd和xml中的编码更改为UTF-16,将内存流更改为UTF32,但似乎没有任何效果。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

如果输入字符串包含非ASCII字符,请勿将输入字符串转换为ASCII。

您可以使用StringReader将输入字符串直接提供给XmlReader

using (var reader = XmlReader.Create(new StringReader(xml), settings)) { ...