C# 验证没有xsd文件的XML文件
我在这个问题上发现了很多很好的问题。不幸的是,答案都说使用xsd文件。我使用xsd.exe从xml文件创建了一个xsd文件。我从VisualStudio复制代码并粘贴到其中,第一行出现错误 我不想花时间弄明白为什么它不能运行,我决定自己编写验证代码 以下是我使用的两点:C# 验证没有xsd文件的XML文件,c#,xml,C#,Xml,我在这个问题上发现了很多很好的问题。不幸的是,答案都说使用xsd文件。我使用xsd.exe从xml文件创建了一个xsd文件。我从VisualStudio复制代码并粘贴到其中,第一行出现错误 我不想花时间弄明白为什么它不能运行,我决定自己编写验证代码 以下是我使用的两点: 每个左插入符号都有一个右插入符号,因此在文件末尾,左插入符号和右插入符号的数量相等。 在文件末尾,如果我从总数中减去左插入符号的数量或右插入符号的数量(因为标题没有反斜杠),然后将总数除以2,则得到斜杠的数量 不过我遇到了一些问
有没有人有更好的方法在不使用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解析器?这有点像询问应该驾驶哪辆车。如果您只想检查数据的格式是否正确,请使用最接近的一个,除非您有非常特殊的要求。