我正在尝试根据它的 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/