验证没有xsd文件的XML文件

时间:2013-07-03 22:02:33

标签: c# xml

我在这个问题上发现了很多很棒的问题。不幸的是,答案都说使用xsd文件。我使用xsd.exe从xml文件创建了一个xsd文件。我从here复制代码并粘贴到Visual Studio中,我在第一行收到错误。

不想花时间弄清楚为什么它不能运行我决定自己编写验证代码。

以下是我使用的两点:

  1. 每个左侧插入符都有一个正确的插入符号,因此在文件末尾它们将是等量的左右插入符号。

  2. 在文件的末尾,如果我要么占用左侧插入符号,或者右侧插入符号从总数中减去一个(因为标题没有反斜杠)并将总数除以2 ,我得到了斜线的数量。

  3. 我遇到了一些问题。

    1. 我正在使用string.count()此方法还会计算属性中的插入符号(我不想要)。

    2. 我在读完文件后计算出预期的反斜杠数。如果数字不匹配,我写“预期的斜线数不匹配”但我不知道它在文件中的位置。

    3. 我想不出目前解决这些问题的方法。

      有没有人有更好的方法来验证xml文件而不使用xsd文件?

2 个答案:

答案 0 :(得分:7)

请注意,WELL FORMED XML与VALID XML不同。

遵循XML标准的XML被认为是良好的形式,而遵守DTD的XML被认为是有效的。

如果您只是想检查XML是否格式正确,请尝试:

try
{
    var file = "Your xml path";

    var settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, XmlResolver = null };

    using (var reader = XmlReader.Create(new StreamReader(file), settings))
    {
        var document = new XmlDocument();
        document.Load(reader);
    }
}

catch (Exception exc)
{
    //show the exception here
}

P.S:XML的良好格式始终是有效XML的先决条件。

希望它有所帮助!

答案 1 :(得分:1)

当你说“插入符号”时,我认为你一定是在谈论“<”和“>”符号,在XML世界中通常被称为“尖括号”。

当您谈到检查插入符号是否匹配时,您正在讨论该文件是否符合XML语法。这在XML世界中被称为“格式良好的检查”。验证是不同的,更深层次的。您需要一个模式(XSD模式或其他类型)进行验证,但是对于格式良好的检查,您只需要一个XML解析器。

不要试图自己实施格式良好的检查。 (a)因为它并不容易,(b)因为解析器很容易现成,而且(c)因为你显然对问题没有非常深入的了解。只需通过XML解析器运行您的文件,它就能为您完成工作。