2
我有一個XDocument與一些元素/子元素等,我想使每個元素的值UpperCase。UpperCase與LINQ的所有Xml元素值
doc.Descendants().ToList().ForEach(f => f.Value = f.Value.ToUpper());
不起作用,因爲它將所有值(如上)連接到父元素中。
我有一個XDocument與一些元素/子元素等,我想使每個元素的值UpperCase。UpperCase與LINQ的所有Xml元素值
doc.Descendants().ToList().ForEach(f => f.Value = f.Value.ToUpper());
不起作用,因爲它將所有值(如上)連接到父元素中。
LINQ表達式通常不應該修改源的值。他們應該只返回新值(把它們作爲一個過濾器...你把一些東西,不同的東西出來)
foreach (var desc in doc.Descendants()) {
var nodes = desc.Nodes().Where(p => p.NodeType == XmlNodeType.Text);
foreach (XText node in nodes) {
node.Value = node.Value.ToUpper();
}
}
我這種方式解決了它 - 不知道它的最好的,但它的工作原理。
private void btnConvert_Click(object sender, EventArgs e)
{
XDocument doc = XDocument.Parse(txtXml.Text);
ProcessElement(doc.Elements().First());
txtXml.Text = doc.ToString(SaveOptions.DisableFormatting);
}
private void ProcessElement(XElement element)
{
if (element.HasElements)
element.Elements().ToList().ForEach(e => ProcessElement(e));
else
element.Value = element.Value.ToUpper();
}
作爲一個建議,當你想問一個關於C#的問題時,總是將它標記爲C#。不是C#-2.0,C#-4.0 ... C#!如果問題依賴於版本,您可以添加其他標籤的確切版本,但總是放置C#標籤。沒有人回答你的問題並不是因爲這很困難,而是因爲很多人用最常見的標籤(C#,.NET,LINQ)「過濾」他們看到的問題。如果您將鼠標移動到您現在問題的標籤上,您會看到C#23.7K關注者,LINQ 3.2k關注者以及您的標籤206和3追隨者。巨大差距 :-) – xanatos 2011-03-16 09:36:54