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