我有一个带有许多元素/子元素等的XDocument,我想制作每个元素UpperCase的值。
doc.Descendants().ToList().ForEach(f => f.Value = f.Value.ToUpper());
不起作用,因为它将所有值(作为上部)连接到父元素中。
答案 0 :(得分:2)
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();
}
}
答案 1 :(得分:0)
我这样解决了 - 不确定它是最好的但是有效。
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();
}