LINQ XML - 在空异常中添加元素
LINQ XML - add element go in Null Exception
当我执行下面的代码时,为了在 XML 文件中添加一个元素,我检索了一个
“System.NullReferenceException”,详细说明:“System.Xml.Linq.XContainer.Element(...) return null”。
我无法解释为什么。
该文件存在,其中的元素也存在。
我正在使用以下代码:
XDocument COCOPrivsSession = XDocument.Load(Path.GetFullPath(Properties.Settings.Default.pathData) + "currentSession_" + System.DateTime.Now.ToString("ddMMyyyy") + ".xml");
COCOPrivsSession.Element("PRIVSEVENTS").Element("Priv_" + PrivNumber.ToString()).Add(
new XElement("Session_" + (COCOPrivsSession.Elements("Priv_" + PrivNumber).Count() + 1).ToString(),
new XElement("hostName", cbHOSTSelector.Text.ToString()),
new XElement("startTime", System.DateTime.Now.ToString("dd/MM/yyyy-HH:mm:ss")),
new XElement("dedicatedTime_seconds", Program.MainFRMHome.TimeLeft_Priv[PrivNumber].ToString()),
new XElement("calculatedEndTime", System.DateTime.Now.AddSeconds(Program.MainFRMHome.TimeLeft_Priv[PrivNumber]).ToString("dd/MM/yyyy-HH:mm:ss"))
)
);
COCOPrivsSession.Save(Path.GetFullPath(Properties.Settings.Default.pathData) + "currentSession_" + System.DateTime.Now.ToString("ddMMyyyy") + ".xml");
这是XML根
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--SESSIONE CORRENTE-->
<CURRENTSESSION>
<SESSION_INFO>
<Origin>
<siteVersion>1.9</siteVersion>
<siteName>COCOTimer</siteName>
<xmlVersion>0.2</xmlVersion>
</Origin>
<currentSession>
<startDate />09/02/2021 18:11:48</currentSession>
</SESSION_INFO>
<PRIVSEVENTS>
<Priv_1 />
<Priv_2 />
<Priv_3 />
<Priv_4 />
<Priv_5 />
<Priv_6 />
<Priv_7 />
<Priv_8 />
<Priv_9 />
<Priv_10 />
<Priv_11 />
<Priv_12 />
<Priv_13 />
<Priv_14 />
<Priv_15 />
</PRIVSEVENTS>
</CURRENTSESSION>
有没有人遇到相同或相似的问题并解决了?
编辑:
jdweng的回答解决了我的问题
以下为测试作品:
XDocument COCOPrivsSession = XDocument.Load(FILENAME);
string PrivNumber = "1";
string host = "host";
string timeLeft = "1234";
int seconds = 10;
XElement PRIVSEVENTS = COCOPrivsSession.Descendants("PRIVSEVENTS").FirstOrDefault();
PRIVSEVENTS.Add(
new XElement("Session_" + (COCOPrivsSession.Elements("Priv_" + PrivNumber).Count() + 1).ToString(),
new XElement("hostName", host),
new XElement("startTime", System.DateTime.Now.ToString("dd/MM/yyyy-HH:mm:ss")),
new XElement("dedicatedTime_seconds", timeLeft),
new XElement("calculatedEndTime", System.DateTime.Now.AddSeconds(seconds).ToString("dd/MM/yyyy-HH:mm:ss"))
)
);
当我执行下面的代码时,为了在 XML 文件中添加一个元素,我检索了一个 “System.NullReferenceException”,详细说明:“System.Xml.Linq.XContainer.Element(...) return null”。 我无法解释为什么。 该文件存在,其中的元素也存在。
我正在使用以下代码:
XDocument COCOPrivsSession = XDocument.Load(Path.GetFullPath(Properties.Settings.Default.pathData) + "currentSession_" + System.DateTime.Now.ToString("ddMMyyyy") + ".xml");
COCOPrivsSession.Element("PRIVSEVENTS").Element("Priv_" + PrivNumber.ToString()).Add(
new XElement("Session_" + (COCOPrivsSession.Elements("Priv_" + PrivNumber).Count() + 1).ToString(),
new XElement("hostName", cbHOSTSelector.Text.ToString()),
new XElement("startTime", System.DateTime.Now.ToString("dd/MM/yyyy-HH:mm:ss")),
new XElement("dedicatedTime_seconds", Program.MainFRMHome.TimeLeft_Priv[PrivNumber].ToString()),
new XElement("calculatedEndTime", System.DateTime.Now.AddSeconds(Program.MainFRMHome.TimeLeft_Priv[PrivNumber]).ToString("dd/MM/yyyy-HH:mm:ss"))
)
);
COCOPrivsSession.Save(Path.GetFullPath(Properties.Settings.Default.pathData) + "currentSession_" + System.DateTime.Now.ToString("ddMMyyyy") + ".xml");
这是XML根
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--SESSIONE CORRENTE-->
<CURRENTSESSION>
<SESSION_INFO>
<Origin>
<siteVersion>1.9</siteVersion>
<siteName>COCOTimer</siteName>
<xmlVersion>0.2</xmlVersion>
</Origin>
<currentSession>
<startDate />09/02/2021 18:11:48</currentSession>
</SESSION_INFO>
<PRIVSEVENTS>
<Priv_1 />
<Priv_2 />
<Priv_3 />
<Priv_4 />
<Priv_5 />
<Priv_6 />
<Priv_7 />
<Priv_8 />
<Priv_9 />
<Priv_10 />
<Priv_11 />
<Priv_12 />
<Priv_13 />
<Priv_14 />
<Priv_15 />
</PRIVSEVENTS>
</CURRENTSESSION>
有没有人遇到相同或相似的问题并解决了?
编辑: jdweng的回答解决了我的问题
以下为测试作品:
XDocument COCOPrivsSession = XDocument.Load(FILENAME);
string PrivNumber = "1";
string host = "host";
string timeLeft = "1234";
int seconds = 10;
XElement PRIVSEVENTS = COCOPrivsSession.Descendants("PRIVSEVENTS").FirstOrDefault();
PRIVSEVENTS.Add(
new XElement("Session_" + (COCOPrivsSession.Elements("Priv_" + PrivNumber).Count() + 1).ToString(),
new XElement("hostName", host),
new XElement("startTime", System.DateTime.Now.ToString("dd/MM/yyyy-HH:mm:ss")),
new XElement("dedicatedTime_seconds", timeLeft),
new XElement("calculatedEndTime", System.DateTime.Now.AddSeconds(seconds).ToString("dd/MM/yyyy-HH:mm:ss"))
)
);