0

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

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

这是我正在使用的两点:

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

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

我遇到了一些问题。

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

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

我暂时想不出解决这些问题的方法。

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

4

2 回答 2

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
}

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

希望能帮助到你!

于 2013-07-04T02:33:37.010 回答
1

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

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

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

于 2013-07-04T06:54:37.603 回答