[英]How do I select a specific xmlnode and change it values
我的xml看起來像這樣...
<?xml version="1.0" encoding="utf-8"?>
<messwerte>
<messwert>
<tag>1</tag>
<niederschlag>46</niederschlag>
<temperatur>7,6</temperatur>
<druck>4,6</druck>
</messwert>
......
</messwerte>
現在,我想給一個特定的日子,我想更改“ niederschlag”,“ temperatur”和“ druck”,並嘗試了以下操作:
public static void WriteXML(int day, double[] mess, string path)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlElement nieder = doc.SelectSingleNode("/messwerte/messwert" + Convert.ToString(day) + "/niederschlag") as XmlElement;
if (nieder != null)
{
nieder.InnerText = Convert.ToString(mess[0]);
}
}
它不會工作。 而且我知道這是baaaad和超級基礎的,但是我無法使它工作。
我建議它對您不起作用的原因是,您正在嘗試使用一個xpath字符串執行2種不同的操作。
首先,您必須找到帶有tag
元素的messwert
元素,該元素的InnerText值與您要傳遞的day
值相匹配。
確定正確的元素后,您要更改niederschlag
元素的InnerText。
即使將其寫成看起來很復雜,利用LINQ查詢也可以極大地簡化它:
public static void WriteXML(int day, double[] mess, string path)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
var nieder = (from XmlElement element in doc.GetElementsByTagName("messwert")
where element.SelectSingleNode("tag").InnerText == day.ToString()
select element).First().SelectSingleNode("niederschlag");
if (nieder != null)
{
nieder.InnerText = mess[0].ToString();
}
doc.Save(path);
}
該代碼假定您的數據受到嚴格控制,並且您永遠不會尋找沒有一天的日子。
如果不是這種情況,則必須將包含First()
方法的查詢分配給臨時變量,並檢查其是否為null。
這樣的事情應該起作用:
public static void WriteXML(int day, double[] mess, string path)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
var messwert = (from XmlElement element in doc.GetElementsByTagName("messwert")
where element.SelectSingleNode("tag").InnerText == day.ToString()
select element).FirstOrDefault();
if(messwert == null)
{
throw new ArgumentException($"The day value, doesn't exist. the value passed is {day}");
}
var nieder = messwert.SelectSingleNode("niederschlag");
if (nieder != null)
{
nieder.InnerText = mess[0].ToString();
}
doc.Save(path);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.