我想加载位于我服务器上的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”变量上的空字符串。我不知道为什么这样做,当我使用相同的代码但路径在本地机器上时,它的工作正常。
答案 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"));