我需要验证包含XML Data的字符串,不需要架构验证。我需要做的就是确保XML格式正确并且编码正确。例如,我希望我的代码将此XML片段标识为无效:
<?xml version="1.0" encoding="utf-8"?>
<parentNode> Positions1 ’</parentNode>
使用LoadXML
中的XMLDocument
方法不起作用,我在上面加载代码段时没有抛出任何错误。
如果内容位于XML文件中,我知道如何执行此操作,以下代码段显示:
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ConformanceLevel = ConformanceLevel.Document;
readerSettings.CheckCharacters = true;
readerSettings.ValidationType = ValidationType.None;
xmlReader = XmlReader.Create(xmlFileName, readerSettings);
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlReader);
如果没有创建临时文件来写出我的xml字符串内容,然后创建一个XmlReader
实例来读取它,还有其他选择吗?如果有人可以指导我朝着正确的方向解决这个问题,那就非常感激。
答案 0 :(得分:1)
您还没有完全理解编码的含义。如果你的内存中有一个.Net字符串,那就不再是“原始数据”,因此没有编码。所以LoadXML有很好的理由。所以你想做的事情根本没有多大意义。但如果你真的想这样做:
您可以将字符串转换为内存流,因此您不必编写临时文件。然后,您可以在调用XmlReader.Create时使用该流而不是xmlFileName。
答案 1 :(得分:0)
Achim的,
感谢您的详细回复,我终于找到了符合我需求的解决方案。它涉及从'unicode'字符串中获取字节,然后将字节转换为utf8编码。
try
{
byte[] xmlContentInBytes = new System.Text.UnicodeEncoding().GetBytes(xmlContent);
System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false, true);
utf8.GetChars(xmlContentInBytes);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}