在使用XDocument.Load()加载文件之前,如何测试文件以查看它是否是有效的XML文件?

ade*_*ena 34 c# xml linq-to-xml

我正在使用以下内容在C#应用程序中加载XML文档:

XDocument xd1 = new XDocument();
xd1 = XDocument.Load(myfile);
Run Code Online (Sandbox Code Playgroud)

但在此之前,我会测试以确保文件存在:

File.Exists(myfile);
Run Code Online (Sandbox Code Playgroud)

但是......是否有一种(简单)方法在XDocument.Load()之前测试文件以确保它是一个有效的XML文件?换句话说,我的用户可能会意外地在文件浏览器中单击另一个文件并尝试加载,例如,.php文件会导致异常.

我能想到的唯一方法是将它加载到StreamWriter中并简单地对前几个字符进行文本搜索,以确保它们"

谢谢!

-Adeena

Jen*_*fer 43

如果要向用户显示消息,可能只是值得捕获特定的异常:

 try
 {
   XDocument xd1 = new XDocument();
   xd1 = XDocument.Load(myfile);
 }
 catch (XmlException exception)
 {
     ShowMessage("Your XML was probably bad...");
 }
Run Code Online (Sandbox Code Playgroud)

  • 这工作得很好,但是如果我们可以合理地预期异常会经常发生,那是不是已经到了我们使用异常处理来管理流程的地步,什么时候应该使用 if 语句之类的?似乎 XmlDocument 应该有一个类似 int.TryParse() 或 IsWellFormed(xml) 方法的 TryLoad 方法...... (2认同)

Dim*_*hev 28

这个问题将" 格式良好 "与" 有效 "XML文档混淆.

根据定义,有效的xml文档是一个格式良好的文档.此外,它必须满足DTD或模式(xml模式,relaxng模式,schematron其他约束)才有效.

从问题的措辞来看,很可能它会问:

"如何确保文件包含格式良好的XML文档?".

答案是,如果XML文档可以通过兼容的XML解析器成功解析,那么它就是格式良好的.由于XDocument.Load()方法正是这样做的,因此您只需要捕获异常,然后得出结论文件中包含的文本格式不正确.


Joe*_*orn 10

只需加载它并捕获异常.同样的File.Exists()- 文件系统是易失性的,因为File.Exists()返回true并不意味着你将能够打开它.