从UNC路径加载XML文件无法正常工作

时间:2014-07-08 21:21:22

标签: c# xml unc

我想加载位于我服务器上的XML文件,这样我就可以获得名为“CheckInterval”的XML元素的值,并将其存储在名为“NewIntervalSet”的字符串中。

我正在加载名为“ConfigFile.xml”的以下XML文件。

<?xml version="1.0" encoding="utf-8"?>
<Cart>
  <CartConfiguration>
     <CheckInterval>0.25</CheckInterval>
  </CartConfiguration>
</Cart>

我加载它的方式如下:

XElement xelement;
xelement = XElement.Load(Path.Combine("\\\\server\\public\\Engineering","ConfigFile.xml"));

我将XML元素“CheckInterval”存储到字符串“NewIntervalSet”中的方式如下:

string NewIntervalSet;
NewIntervalSet=xelement.Descendants("CartConfiguration")
     .Select(x => x.Element("CheckInterval").Value).FirstOrDefault();

当我在加载文件的位置放置断点时,我可以看到文件正确加载,所以我知道路径是正确的,但是当它尝试选择XML元素时,它会跳过这行代码并返回null值,因此“NewIntervalSet”变量上的空字符串。我不知道为什么这样做,当我使用相同的代码但路径在本地机器上时,它的工作正常。

2 个答案:

答案 0 :(得分:1)

您的程序可能遇到了权限问题。根据MSDN,XElement通过调用XmlReader.Create创建,this反过来说明了以下内容

  

没有凭据的默认XmlUrlResolver用于访问任何凭据   外部资源,如文档类型定义(DTD),实体,   架构,等等。如果外部资源位于网络上   需要身份验证的资源,请指定一个XmlResolver   使用XmlReaderSettings.XmlResolver获取必要的凭据   属性。

由于您的XML文档位于网络路径上,因此它使用默认/空凭据,导致它没有读取权限和空文档。尝试将文件作为流打开,以便您可以在读取文本的位置进行运行,然后使用{{3}}重载将该流传输到新的XElement中。或者,自己实例化XmlResolver,以便设置凭据。

答案 1 :(得分:0)

我通过将XML文件作为XDocument加载而不是作为XElement来解决此问题。我加载XML文件的新方法如下:

XDocument xDocument;
xDocument= XDocument.Load(Path.Combine("\\\\server\\public\\Engineering","ConfigFile.xml"));