C# 验证没有xsd文件的XML文件

C# 验证没有xsd文件的XML文件,c#,xml,C#,Xml,我在这个问题上发现了很多很好的问题。不幸的是,答案都说使用xsd文件。我使用xsd.exe从xml文件创建了一个xsd文件。我从VisualStudio复制代码并粘贴到其中,第一行出现错误 我不想花时间弄明白为什么它不能运行,我决定自己编写验证代码 以下是我使用的两点: 每个左插入符号都有一个右插入符号,因此在文件末尾,左插入符号和右插入符号的数量相等。 在文件末尾,如果我从总数中减去左插入符号的数量或右插入符号的数量(因为标题没有反斜杠),然后将总数除以2,则得到斜杠的数量 不过我遇到了一些问

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

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

以下是我使用的两点:

  • 每个左插入符号都有一个右插入符号,因此在文件末尾,左插入符号和右插入符号的数量相等。

  • 在文件末尾,如果我从总数中减去左插入符号的数量或右插入符号的数量(因为标题没有反斜杠),然后将总数除以2,则得到斜杠的数量

  • 不过我遇到了一些问题。

  • 我正在使用string.count()此方法还统计属性中的插入符号(我不需要)

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

  • 目前我想不出解决这些问题的办法


    有没有人有更好的方法在不使用xsd文件的情况下验证xml文件?

    请注意,格式良好的xml与有效的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
    }
    
    注意:XML的良好格式始终是有效XML的先决条件

    希望有帮助

    当您说“插入符号”时,我想您一定是在谈论“”符号,在XML世界中,这些符号通常被称为“尖括号”

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


    不要试图自己实施良好形式检查。(a) 因为这并不容易,(b)因为解析器是现成的,(c)因为您显然对这个问题没有非常深入的理解。只要通过XML解析器运行您的文件,它就会为您完成这项工作。

    在这种情况下,验证意味着什么?如果您想确保它是任何类型的有效XML文件,
    XDocument.Load
    起作用。如果您想确保它匹配一组特定的约束,那么像XSD这样的东西是理想的。在我看来,您似乎找到了XSD的一个示例,在编译它时遇到了困难,然后直接开始手动解析。有更好的方法可以做到这一点(如果你计算的是总计
    ,你会弄错的),但一个主要因素是你对输入文件有多少要求。不要重新发明轮子。找出你的xsd出了什么问题,从长远来看会更简单。相信我,你不是在验证XML。你只是在数成对的
    ,这根本不是一回事。XSD验证数据类型,并确保包含所需的元素。您的验证不仅仅是将XML加载到基本的XML解析器中。你应该修复你的XSD,而不是浪费你的时间和精力,我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。+1,但想知道为什么不建议使用XmlDocument.Load(filename)?非常感谢。这很管用,比我想弄的一团糟好多了。同意@JasonWilliams。将文件名/路径直接传递到。Load还允许传递URL。我应该使用什么XML解析器?这有点像询问应该驾驶哪辆车。如果您只想检查数据的格式是否正确,请使用最接近的一个,除非您有非常特殊的要求。