我有一段时间在我的XML文档中选择单个元素的值
我的文档看起来像
<?xml version="1.0" encoding="utf-8" ?>
<MySettings>
<AttachmentsPath>Test</AttachmentsPath>
<PendingAttachmentsPath>Test2</PendingAttachmentsPath>
</MySettings>
我尝试过以下操作:
XElement mySettings = XElement.Load("MySettings.xml");
string AttachmentsPath = (from e in mySettings.Descendants("MySettings")
select e.Element("AttachmentsPath")).SingleOrDefault().Value;
或
XElement mySettings = XElement.Load("MySettings.xml");
string AttachmentsPath = mySettings.Element("AttachmentsPath").Value;
这些都不起作用。我一直得到:
对象引用未设置为 对象的实例。描述:一个 未处理的异常发生在 当前网络的执行 请求。请查看堆栈跟踪 有关错误的更多信息 它起源于代码。
异常详细信息: System.NullReferenceException:Object 引用未设置为的实例 对象
来源错误:
第33行:
x =&gt; x.Type);第34行:第35行:
AttachmentsPath =(来自e in mySettings.Descendants( “设置”) 第36行:
选择 e.Element( “AttachmentsPath”))的SingleOrDefault()值。; 第37行:
我可以看到它正确加载到XML文档中。
在尝试访问xml文档中的这个设置值时,我做错了什么?哪种方式正确?
答案 0 :(得分:3)
由于“MySettings”是根节点,因此它没有名为“MySettings”的后代
试
var AttachmentsPath = (from e in mySettings.Descendants("AttachmentsPath")
select e).SingleOrDefault().Value;
然而,如果没有节点,SingleOrDefault会返回null,也许您可以尝试将其视为更安全
var AttachmentsPathElement = (from e in mySettings.Descendants("AttachmentsPath")
select e).SingleOrDefault();
if(AttachmentsPathElement != null)
{
AttachmentsPath = AttachmentsPathElement.Value;
}
答案 1 :(得分:2)
这很有效。
string path = mySettings.Element("AttachmentsPath").Value;
答案 2 :(得分:1)
这是错误的代码,类的默认值为null
,如果返回default,则会得到空引用异常。
SingleOrDefault().Value
其次,如果你的第二种方法不起作用,很可能意味着你无法正确加载XML文件,或者它无法在XML中找到元素“AttachmentsPath”。
XElement mySettings = XElement.Load("MySettings.xml");
string AttachmentsPath = mySettings.Element("AttachmentsPath").Value;
答案 3 :(得分:1)
你几乎就在那里,你所要做的就是指定AttachmentPath所在的根元素。
就是这样......
string attachmentsPath= mySettings.Root.Element("MySettings")
.Elements("AttachmentsPath").SingleOrDefault().Value;
答案 4 :(得分:0)
几小时前我刚刚处理过这样的事情。事实证明,我搜索的元素不存在。您的文档中是否有可能没有名为“设置”的元素?
答案 5 :(得分:0)
为什么要在XElement中加载文档?为什么不XDocument?
你可以试试这个:
XDocument mySettings = XDocument.Load("MySettings.xml");
string AttachmentsPath = mySettings.Root.Element("AttachmentsPath").Value;
答案 6 :(得分:0)
请尝试这种方式。我测试了这段代码的工作正常
XDocument xmlDoc = XDocument.Load(fileName);
XElement page = xmlDoc.Descendants("MySettings").FirstOrDefault();
string AttachmentsPath = page.Descendants("AttachmentsPath").First().Value;
string PendingAttachmentsPath= page.Descendants("PendingAttachmentsPath").First().Value;