使用C#验证xml字符串内容,包括编码

时间:2011-05-27 21:42:56

标签: c# xml validation encoding xmldocument

我需要验证包含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实例来读取它,还有其他选择吗?如果有人可以指导我朝着正确的方向解决这个问题,那就非常感激。

2 个答案:

答案 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;
        }