c# - 给定编码中的 xml 无效字符

标签 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,但似乎没有效果。有什么想法吗?

最佳答案

如果您的输入字符串包含非 ASCII 字符,请不要将您的输入字符串转换为 ASCII。

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

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

关于c# - 给定编码中的 xml 无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400889/

相关文章:

c# - 在 windows 启动时设置 c# windows 应用程序

.net - 为什么 WebService 会在实际服务返回数据时返回空值?

android - Cordova 自适应图标链接文件资源错误

c# - 如何在C#中的一个循环中运行两个foreach循环

c# - vs2010/c#中的表命名空间错误

带换行符的内联元素上的 XHTML/CSS 填充

css - 如果内容不是段落,是否有必要将 <strong>、<em>、<b>、<i> 包裹在 <p> 标签内?

javascript - 从外部数据表引用表单组件 <h :form>

c# - 从 Lambda 表达式中获取包含参数值的对象数组

java - 在 Java 中验证 spring 配置 xml 文件